jackson:从json中删除一些值并保留一些空值
我有这样的模型:
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中而无需创建额外的模型吗? 如果答案是肯定的,我该怎么办呢? 如果不是我真的很感激,如果有人给我这个状态的最佳解决方案。
非常感谢。
它对你使用@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 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 getEmployeeWithBaseView(){ //do something }
响应
{ "employee_id":101, "employee_level":5 }