REST服务-动态参数的JSON映射

REST服务-动态参数的JSON映射,rest,jersey-2.0,Rest,Jersey 2.0,下面是我想从REST服务返回的JSON响应 { "id" : 123, "name" : "ABC", } 对于上面的JSON响应,我可以创建一个POJO类 public class Student{ private long id; private String name; //getters and setters } 因此,我可以编写一个getservice来返回Student对象,然后将其转换为JSON @GET @Produces(MediaT

下面是我想从REST服务返回的
JSON
响应

 {
   "id" : 123,
   "name" : "ABC",
 }
对于上面的
JSON
响应,我可以创建一个
POJO

 public class Student{
   private long id;
   private String name;
   //getters and setters
 }
因此,我可以编写一个
getservice
来返回
Student
对象,然后将其转换为
JSON

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response get(){
       Student student = new Student();
       student.setId(123);
       student.setName("ABC");

       return Response.ok(student).build();
}
它很好用。现在我想为我的
JSON
响应引入可选参数,如下所示

{
   "id" : 123,
   "name" : "ABC",
   "params" : {"param1":"xxx","param2":342}
}

这里,
JSON
响应中的
params
是一个
对象
类型,该对象的属性不是固定的。对于每个请求,它都会有所不同,比如有时它可以有3个属性,有时它没有属性。我不知道如何为这个需求创建我的
POJO
类。有人能给我一个建议吗?

除非你不需要什么特别的东西,否则你应该按照如下方式设计:

 public class Student{
   private long id;
   private String name;
   //getters and setters
   private Map<String, String> parameters = new HashMap<>(); 

   public void add(String key, String value) {
       parameters.put(key, value);
   }

   public void addAll(Map<String, String> map) {
       parameters.putAll(map);
   }
 }
学生:

 public class Student{
   private long id;
   private String name;
   //getters and setters
   private StudentParameters studentParameters;

   public setStudentParameters(final StudentParameters studentParameters) {
       this.studentParameters = studentParameters;
   }

 }

不要创建复杂的层次结构,例如
Map
它会使整个结构复杂化。

您使用的JSON提供程序是什么?Jackson?请注意,您的POJO很可能是DTO,而不是ORM实体。REST将端点映射到操作,而不是将资源映射到实体。根据积垢,可以有重叠的ofc。但是,通过这种映射,除此之外的任何东西都将失败。Ofc。如果这不是目的,那么将JSON映射到一个对象是完全有效的。@peeskillet,是的,我正在使用Jackson只需在
学生中为
参数
使用
映射,就像bodo说的那样。它会给你想要的结果。
 public class Student{
   private long id;
   private String name;
   //getters and setters
   private StudentParameters studentParameters;

   public setStudentParameters(final StudentParameters studentParameters) {
       this.studentParameters = studentParameters;
   }

 }