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 中的常规字符串,请不要将序列化程序配置为删除它们。
我正在尝试使用 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 中的常规字符串,请不要将序列化程序配置为删除它们。