我有这样的模型:
public class Employee {
@JsonProperty("emplyee_id")
private Integer id;
@JsonProperty("emplyee_first_name")
private String firstName;
@JsonProperty("emplyee_last_name")
private String lastName;
@JsonProperty("emplyee_address")
private String address;
@JsonProperty("emplyee_age")
private Byte age;
@JsonProperty("emplyee_level")
private Byte level;
//getters and setters
}
现在我需要使用这个(唯一的)模型创建两个JSON.
第一个必须这样,例如:
{
"employee_id":101,
"employee_first_name":"Alex",
"employee_last_name":"Light",
"employee_age":null,
"employee_address":null
}
第二个必须像这样:
{
"employee_id":101,
"employee_level":5
}
顺便说一句,我已经测试了@JsonIgnore和@JsonInclude(JsonInclude.Include.NON_NULL).
第一个(我知道的)问题是,那些字段不能包含在其他JSON中(例如,如果level获取此注释,它将不包含在第二个JSON中)
而第二个的问题是,空值不能包含在JSON中.
那么我可以保留空值并阻止一些其他属性包含在JSON中而无需创建额外的模型吗?如果答案是肯定的,我该怎么办呢?如果不是我真的很感激,如果有人给我这个状态的最佳解决方案.
非常感谢.
最佳答案 它对你使用@JsonView注释很有用
public class Views {
public static class Public {
}
public static class Base {
}
}
public class Employee {
@JsonProperty("emplyee_id")
@JsonView({View.Public.class,View.Base.class})
private Integer id;
@JsonProperty("emplyee_first_name")
@JsonView(View.Public.class)
private String firstName;
@JsonProperty("emplyee_last_name")
@JsonView(View.Public.class)
private String lastName;
@JsonProperty("emplyee_address")
private String address;
@JsonProperty("emplyee_age")
private Byte age;
@JsonProperty("emplyee_level")
@JsonView(View.Base.class)
private Byte level;
//getters and setters
}
在你的json响应中添加@JsonView(Public / Base.class)它将基于jsonview注释返回
//requestmapping
@JsonView(View.Public.class)
public ResponseEntity<Employee> getEmployeeWithPublicView(){
//do something
}
响应:
{
"employee_id":101,
"employee_first_name":"Alex",
"employee_last_name":"Light",
"employee_age":null,
"employee_address":null
}
对于第二个
//requestmapping
@JsonView(View.Base.class)
public ResponseEntity<Employee> getEmployeeWithBaseView(){
//do something
}
响应
{
"employee_id":101,
"employee_level":5
}