@Consumes REST Web服务中的JSON,每次都有不同数量的JSON值

时间:2016-02-25 06:54:56

标签: java json rest jax-rs

我希望@Consumes具有JSON类型的REST Web服务,但JSON输入每次都包含不同数量的值,例如

{"name":"x","age":23,"language":"java"}

{"name":"c","age":"34","language":"c++","db":"oracle"}

因此输入JSON每次都可能有所不同。如何在REST代码中使用这种类型的JSON?

3 个答案:

答案 0 :(得分:0)

在Java中,您需要一个镜像JSON可能内容的类。

例如:

public class Developer {

    private String name, language, db;

    private int age;

    // getters and setters

}

如果您的业务逻辑允许使用多种语言和数据库,则可以包括

private Set<String> language, db;

而不是String字段。

答案 1 :(得分:0)

我得到了如下答案:

public Response jsonREST(InputStream incomingData) {

   StringBuilder jsonBuilder = new StringBuilder();
   try {
       BufferedReader in = new BufferedReader(new InputStreamReader(incomingData));
       String line = null;
       while((line = in.readLine()) != null) {
           System.out.println("output "+line);

           jsonBuilder.append(line);
       }
   } catch(Exception e) {
       System.out.println("Error Parsing: - ");
   }
   System.out.println("Data Received: " + jsonBuilder.toString());

   return Response.status(200).entity(jsonBuilder.toString()).build();
}

谢谢,我需要的是我想在休息时解析我的json

就像我不知道密钥的名称所以我想解析整个json并对其进行一些操作。

答案 2 :(得分:0)

由于您使用的是Jersey并且消耗的JSON可能包含任意键值对,您可以在Jersey控制器中尝试这样的事情:

@POST
@Path("/json-map")
@Consumes(MediaType.APPLICATION_JSON)
public SomeSortOfResponse receiveArbitraryJsonMap(Map<String,String> map) {
    // do stuff with map of key-value pairs
}

您的JSON应该解组到您可以使用的地图。

或者,如果您的JSON类似于任意列表,则为字符串:

@POST
@Path("/json-list")
@Consumes(MediaType.APPLICATION_JSON)
public SomeSortOfResponse receiveArbitraryJsonList(List<String> list) {
    // do stuff with list
}

您需要为两个端点提供不同的@Paths