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

时间:2015-11-30 14:36:49

标签: rest jersey-2.0

让我们采取以下JSON回复,我想从REST service回复,

 {
   "id" : 123,
   "name" : "ABC",
 }

对于上述JSON响应,我可以创建一个POJO类,例如

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

所以,我可以写一个GET service来返回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}
}

此处params响应中的JSONObject类型,该对象的属性不固定。对于每个请求,它会有所不同,有时它可以有3个属性,有时则没有。我不知道如何为此要求创建POJO课程。任何人都可以建议我如何做到这一点吗?

1 个答案:

答案 0 :(得分:2)

除非您不需要任何特殊内容,否则您应该将其设计为:

 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>>,它会使整个结构复杂化。