Java中的Json转换和空值管理问题

Java中的Json转换和空值管理问题,java,json,jackson,Java,Json,Jackson,我有一个json字符串,我想使用Jackson在Java中使用以下代码对其进行一些更改: public String transformJson(String json) { final ObjectMapper mapper = new ObjectMapper(); Student s = mapper.readValue(json, Student.class)) // Do some changes on the object s return m

我有一个json字符串,我想使用Jackson在Java中使用以下代码对其进行一些更改:

public String transformJson(String json) {

    final ObjectMapper mapper = new ObjectMapper();

    Student s = mapper.readValue(json, Student.class))

    // Do some changes on the object s

    return mapper.writeValueAsString(s);
}
这是学生班:

@AllArgsConstructor
@Data
@JsonInclude(Include.NON_NULL)
public static class Student {
    private String firstName;
    private String lastName;
    private String country;
    private Long age;
}
上面的代码可以工作,我们假设输入中的json如下所示:

{
   "firstName" : "Jim",
   "lastName" : "Miles"
}
{
   "firstName" : "Jim",
   "lastName" : "Miles",
   "country" : null 
}
如果不做任何更改,输出将是相同的。注释@JsonInclude(Include.NON_NULL)只会从输出中删除任何空字段

但是现在新的要求是:当输入json显式地将一个值定义为null时,那么输出应该将该字段显示为null。这意味着当输入为以下内容时:

{
   "firstName" : "Jim",
   "lastName" : "Miles"
}
{
   "firstName" : "Jim",
   "lastName" : "Miles",
   "country" : null 
}
那么输出仍然应该是:

{
   "firstName" : "Jim",
   "lastName" : "Miles",
   "country" : null 
}

关于如何实现这一点,你有什么想法吗?

你可以尝试将所有字段包装在
AtomicReference
中,但这并不十分优雅。拥有值为null的属性有什么意义?
{country:null}
{}
之间有什么区别?当您需要转换JSON->JSON时,有时您可能会发现根本不使用中间对象表示很有用。例如,请参见:您可以尝试将所有字段包装在
AtomicReference
中,但这并不十分优雅。拥有值为null的属性有什么意义?
{country:null}
{}
之间有什么区别?当您需要转换JSON->JSON时,有时您可能会发现根本不使用中间对象表示很有用。例如,见: