![](/img/trans.png)
[英]How to tell Jackson to ignore a field during serialization if its value is null?
[英]Java jackson how to unwrap a raw value during serialization?
在 Java 中使用 Jackson json 庫,是否可以執行以下操作:
public class MyObject {
@JsonRawValue
@JsonUnwrapped
private String rawJson;
}
public class DTO {
public MyObject json;
}
rawJson 的例子:
{
"key": "value"
}
當 DTO 被序列化並呈現為 json 時,我希望 JSON 看起來像:
{
"dto": {
"key":"value"
}
}
相反,它總是:
{
"dto":{
"rawJson":{
"key":"value"
}
}
}
基本上,當您的屬性之一是存儲在帶有@JsonRawValue 的字符串中的 JSON 值時,@JsonUnwrapped 不起作用。
理想情況下,我正在尋找 MyObject 類級別的序列化解決方案,而不是 DTO,否則我不僅必須將解決方案應用於 DTO,而且還必須將解決方案應用於引用 MyObject 的所有其他 DTO。
更新:
下面的答案在一個位置解決了這個問題,但在以下場景中仍然是一個問題;
public class DTO2 {
@JsonUnwrapped
public MyObjectAbstract json2;
}
MyObject 是 MyObjectAbstract 的擴展,當 DTO2 MyObjectAbstract 是 MyObject 的一個實例時,我希望 DTO2 簡單地序列化為:
{
"key": "value"
}
問題是,只要 DTO2.MyObjectAbstract 是 MyObject 的一個實例,它就會像這樣序列化:
{
"json": {
"key": "value"
}
}
您可以在 getter 方法上使用JsonRawValue
和JsonValue
注釋。 下面是一個例子:
public class JacksonUnwrapped {
static class MyObject {
private String rawJson;
MyObject(final String rawJson) {
this.rawJson = rawJson;
}
@JsonRawValue
@JsonValue
String getRawJson() {
return rawJson;
}
}
static class DTO {
public MyObject json;
DTO(final MyObject json) {
this.json = json;
}
}
public static void main(String[] args) throws JsonProcessingException {
final ObjectMapper objectMapper = new ObjectMapper();
final DTO dto = new DTO(new MyObject(
"{\"key\": \"value\"}"));
System.out.println(objectMapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(dto));
}
}
輸出:
{
"json" : {"key": "value"}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.