Jackson 序列化:包括空字符串(如果有)

Jackson Serialize: Include empty string if any

我正在尝试使用 jackson 将 class 序列化为 JSON 字符串。

Class

public class Response {


  @JsonProperty("status")
  private Short status;

  @JsonProperty("data")
  @JsonRawValue
  private String data;

  @JsonProperty("message")
  @JsonRawValue
  private String message;
  
}

使用以下代码序列化

JsonFactory jsonFactory = new JsonFactory();
jsonFactory.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET,false);
ObjectMapper mapper;
mapper = new ObjectMapper(jsonFactory);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.findAndRegisterModules();

Response responseInstance = new Response();
responseInstance.setStatus((short) 400);
responseInstance.setMessage("");
System.out.println(mapper.writeValueAsString(responseInstance));

当消息的值为“”时,我在序列化时得到以下值。

{
   "status": 400,
   "message":
}

而不是

{
   "status": 400,
   "message":""
}

当值为 null 时,将跳过预期的序列化。但是当值为“”时,我希望该值成为序列化的一部分。 序列化时如何在值中包含“”?

@JsonRawValue 是“问题”。

Marker annotation that indicates that the annotated method or field should be serialized by including literal String value of the property as is, without quoting of characters.

[…]

Warning: the resulting JSON stream may be invalid depending on your input value.

换句话说:一切都按预期进行。您的代码告诉序列化程序不要添加引号。序列化程序也照样不添加它们。

如果您需要 JSON 中的常规字符串,请不要将序列化程序配置为删除它们。