我有一个这样的模型:
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)
并且第二个问题是,null
值不能包含在JSON中。
所以我可以保留空值并防止其他属性包含在JSON中而不创建额外的模型吗?如果答案是肯定的,我该怎么办呢?如果不是我真的很感激,如果有人给我这个州的最佳解决方案。
非常感谢。
答案 0 :(得分:1)
使用@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
}