Мне действительно нужна помощь, я десериализирую следующий json:

{
    "name":"myname",
    "userID":"12345",
    "password":"sha1passwordASDESFSGSD",
    "active":"1",
    "profile":"2",
    "job":"Manager"
}

Я использую Джерси для создания webService, когда я получаю json, я получаю его как InputStream

Также я пробовал со строкой

@POST
@Path("user/in/")
@Produces("application/json")
public String InsertUser(InputStream inStr) 
{
    String line = null, res = "POST 200 > ";
    BufferedReader br = new BufferedReader(new InputStreamReader(inStr));
    try {
        while ((line = br.readLine()) != null) {
            System.out.println(line);
            res += line;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        UserInformation user = new Gson().fromJson(res, UserInformation.class);
        System.out.println("All done");
        System.out.println(user.getName());

    } catch (Exception e) {
        System.out.println("Error al convertir jo object " + e.getCause() + e.getMessage());
    }

    return "POST 200 > ";
}

Я пробовал использовать InputStreamReader:

@POST
@Path("user/in/")
@Produces("application/json")
public String InsertUser(InputStream inStr)
{
    try {
        InputStreamReader isr = new InputStreamReader(inStr);
        UserInformation user = new Gson().fromJson(isr, UserInformation.class);
        System.out.println("All done");

        System.out.println(user.getName());

    } catch (Exception e) {
        System.out.println("Error al convertir jo object " + e.getCause() + e.getMessage());
    }

    return "POST 200 > ";
}

Ни один из этих кодов не работает. Они не генерируют исключение и не выводят «Все готово».
Когда я отлаживаю объект, user не отображается в меню переменных.
По моему опыту, это потому, что ошибка происходит в строке UserInformation user = new Gson().fromJson(isr, UserInformation.class);

Но я не могу понять, какой именно.

Мой класс UserInformation - следующий

public class UserInformation {

    private String name;
    private String userID;
    private String password;
    private String active;
    private String profile;
    private String job;

    // Methods removed for brevity
}
0
mavi 27 Апр 2016 в 21:23

2 ответа

Лучший ответ

Я предполагаю, что вы используете Google gson. Вот мой ответ:

    @Post
    @Path("user/in")
    @Produces(MediaType.APPLICATION_JSON)
    public Response InsertUser(string json){
      JsonElement jsonElement = new JsonParser().parse(json);
      JsonObject object = jsonElement.getAsJsonObject();
      String name = object.getAsJsonPrimitive("name").getAsString();
      int userID = object.getAsJsonPrimitve("userID").getAsInt();
      String password = object.getAsJsonPrimitive("password").getAsString();
      String job = object.getAsJsonPrimitive("job").getAsString();
      int active = object.getAsJsonPrimitve("active").getAsInt();
      int profile = object.getAsJsonPrimitve("profile").getAsInt();



      return Response.status(Response.Status.OK).entity("all done").build();


    }
1
jlarrieux 27 Апр 2016 в 19:36

Я уже нашел решение, проблема заключалась в том, что я получал InputStream, следуя его рекомендациям, код решения:

  @POST
  @Path("users/in/")
  @Produces(MediaType.APPLICATION_JSON)
  public String InsertUser(String json)
  { 

      try{
          UserInformation user = new Gson().fromJson(json, UserInformation.class);
          String name = user.getName();
          String userID = user.getUserID();                       
          String password = user.getPassword();
          String job = user.getJob();
          String active = user.getActive();
          String profile = user.getProfile();

      }catch(Exception e){
          System.out.println(Response.status(500).entity(e.getCause() + e.getMessage()).build().toString());
          return Response.status(500).entity(e.getCause() + e.getMessage()).build().toString();
      }

  }
0
mavi 27 Апр 2016 в 21:45