Java @每次使用不同数量的JSON值在REST Web服务中使用JSON

Java @每次使用不同数量的JSON值在REST Web服务中使用JSON,java,json,rest,jax-rs,Java,Json,Rest,Jax Rs,我想@使用带有JSON类型的REST-webservices,但是JSON输入每次持有不同数量的值 {"name":"x","age":23,"language":"java"} 或 因此,每次输入的JSON都可能不同。如何在REST代码中使用这种类型的JSON?在Java中,您需要一个类来镜像JSON的可能内容 例如: public class Developer { private String name, language, db; private int age;

我想
@使用带有JSON类型的REST-webservices,但是JSON输入每次持有不同数量的值

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


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

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

例如:

public class Developer {

    private String name, language, db;

    private int age;

    // getters and setters

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

private Set<String> language, db;
专用集语言,db;

Java中需要一个类来镜像JSON的可能内容,而不是字符串字段。

例如:

public class Developer {

    private String name, language, db;

    private int age;

    // getters and setters

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

private Set<String> language, db;
专用集语言,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();
}
谢谢,我需要的是在rest中解析json


比如我不知道key的名称,所以我想解析整个json并对其进行一些操作。

我得到了如下答案:

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();
}
谢谢,我需要的是在rest中解析json


比如我不知道密钥的名称,所以我想解析整个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
}
@POST
@路径(“/json映射”)
@使用(MediaType.APPLICATION_JSON)
公共SomeSortoResponse接收任意JsonMap(映射映射){
//用键值对的映射做一些事情
}
JSON应该解组到一个映射,然后您就可以使用它了

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

@POST
@Path("/json-list")
@Consumes(MediaType.APPLICATION_JSON)
public SomeSortOfResponse receiveArbitraryJsonList(List<String> list) {
    // do stuff with list
}
@POST
@路径(“/json列表”)
@使用(MediaType.APPLICATION_JSON)
public SomeSortoResponse receiveArbitraryJsonList(列表){
//用清单做事
}

您需要为两个端点指定不同的@path

,因为您使用的是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
}
@POST
@路径(“/json映射”)
@使用(MediaType.APPLICATION_JSON)
公共SomeSortoResponse接收任意JsonMap(映射映射){
//用键值对的映射做一些事情
}
JSON应该解组到一个映射,然后您就可以使用它了

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

@POST
@Path("/json-list")
@Consumes(MediaType.APPLICATION_JSON)
public SomeSortOfResponse receiveArbitraryJsonList(List<String> list) {
    // do stuff with list
}
@POST
@路径(“/json列表”)
@使用(MediaType.APPLICATION_JSON)
public SomeSortoResponse receiveArbitraryJsonList(列表){
//用清单做事
}


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

您是否使用Java和JAX-RS?请看一看,特别是“使用JSON”一节。是的,我使用Java和JAX-RS您是否使用Java和JAX-RS?请看一看,特别是“使用JSON”一节是的,我正在使用Java和JAX。实际上,这不仅仅是语言,我的输入json将包含不同Pojo的属性。例如,名称和语言来自开发人员Pojo,年龄,性别来自个人详细信息Pojo。这只是一个例子。是的,会的。在您的第一个示例中,“db”字段将仅为null。实际上,它不仅与语言有关,而且我的输入json将包含不同Pojo的属性。例如,名称和语言来自开发人员Pojo,年龄来自个人详细信息Pojo。这只是一个例子。是的,会的。在您的第一个示例中,字段“db”将仅为null。例如,我需要获取键值对(在我们的示例中,我希望获取名称、年龄、语言,但我不知道json中可用的键是什么)对我做一些操作你有没有尝试过对一个只有一个字段的类进行解组,这个字段是一个映射你对JSON有多少控制权?输出是否可以改为这样:“值”:{“名称”:“x”,“年龄”:23,“语言”:“java”}在我的情况下,我不知道键的数量和它们的值,可以是任何数字。我的输入json有时会像{“名称”:“x”,“年龄”:23,“语言”:“java”}但有时{“名称”:“x”,“年龄”:23,“语言”:“java”,“性别”:“女性”}比如说,我需要获取键值对(在我们的例子中,我想获取名称、年龄、语言,但我不知道json中有哪些键可用),并对其进行一些操作。您是否尝试过对一个只有一个字段的类进行解组,该字段是一个映射,您对json有多少控制权?输出是否可以改为这样:“值”:{“名称”:“x”,“年龄”:23,“语言”:“java”}在我的情况下,我不知道键的数量和它们的值,可以是任何数字。我的输入json有时会像{“名称”:“x”,“年龄”:23,“语言”:“java”}但有时{“名称”:“x”,“年龄”:23,“语言”:“java”,“性别”:“女性”}那很好。你能告诉我,如果我的json输入像{“name”、“age”、“id”、“sex”}意味着我只收到了作为json输入的密钥,我可以使用List而不是map对象吗(我尝试过,但给出了400个错误)我已经编辑了我的答案,解决了提交任意StringsThat列表的问题,工作正常。你能告诉我,如果我的json输入像{“name”、“age”、“id”、“sex”}意味着我只收到密钥作为json输入,我可以使用List而不是map对象吗(我尝试过,但给出了400个错误)我编辑了我的答案,解决了提交任意字符串列表的问题