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
响应中的 params
是 Object
类型,并且该对象的属性不固定。它会因每个请求而异,例如有时它可以有 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>>
它会使整个结构复杂化。
让我们从我的 REST service
,
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
响应中的 params
是 Object
类型,并且该对象的属性不固定。它会因每个请求而异,例如有时它可以有 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>>
它会使整个结构复杂化。