REST 服务 - JSON 动态参数映射

REST Service - JSON mapping for dynamic parameters

让我们从我的 REST service,

中获取我想要 return 的以下 JSON 回复
 {
   "id" : 123,
   "name" : "ABC",
 }

对于上面的 JSON 响应,我可以创建一个 POJO class 之类的,

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

因此,我可以将 GET service 写入 return 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 响应中的 paramsObject 类型,并且该对象的属性不固定。它会因每个请求而异,例如有时它可以有 3 个属性,有时它会有 none。我不知道如何为此要求创建 POJO class。谁能建议我怎么做?

除非你不需要什么特别的东西,否则你应该这样设计:

 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);
   }
 }

如果您需要类型安全,那么设计会有点复杂,请考虑使用类似的东西:

class StudentParameters {
      long param1;
      String param2;
}

和学生:

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

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

 }

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