@Consumes JSON 在 REST 网络服务中每次使用不同数量的 JSON 值

@Consumes JSON in REST webservices with different number of JSON values each time

我想 @Consumes 一个 JSON 类型的 REST web 服务,但是 JSON 输入每次保存不同数量的值,例如

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

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

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

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

例如:

public class Developer {

    private String name, language, db;

    private int age;

    // getters and setters

}

如果您的业务逻辑允许不止一种语言和数据库,您可以包括

private Set<String> language, db;

而不是字符串字段。

我得到的答案如下:

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 inside rest

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

由于您使用的是 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