Jackson:从json中删除一些值并保留一些空值。

5 浏览
0 Comments

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中。

所以我能保留null值并防止某些其他属性包含在JSON中而不创建额外的模型吗?如果答案是肯定的,那么我该如何做呢?如果不行,我非常感谢任何人给我这种情况下的最佳解决方案。

非常感谢。

0
0 Comments

问题的出现原因是需要从JSON中移除一些值并保留一些空值。解决方法是使用注解来实现。

在给定的代码中,定义了一个Views类,其中包含两个静态内部类Public和Base。Employee类中的id属性使用了@JsonIgnore注解,这意味着在序列化为JSON时会被忽略。firstName和lastName属性使用了@JsonView注解,并指定了View.Public.class,这意味着只有在使用View.Public视图时才会包含这些属性。address和age属性没有指定任何注解,因此在序列化为JSON时会包含这些属性。level属性使用了@JsonView注解,并指定了View.Base.class,这意味着只有在使用View.Base视图时才会包含这个属性。

在请求映射的方法中,使用了@JsonView注解,并指定了不同的视图来返回不同的JSON响应。getEmployeeWithPublicView方法使用了View.Public.class视图,返回的JSON中只包含公共视图中的属性。getEmployeeWithBaseView方法使用了View.Base.class视图,返回的JSON中只包含基本视图中的属性。

最后,根据不同的视图,返回了不同的JSON响应。其中,getEmployeeWithPublicView返回了包含id、firstName、lastName、age和address的JSON,其中age和address的值为null。getEmployeeWithBaseView返回了包含id和level的JSON。

通过使用注解和不同的视图,可以灵活地控制JSON中的属性。

0