java如何忽略过程值_如果值为null,如何告诉Jackson在序列化期间忽略某个字段?...
回答(16)
2 years ago
mapper.setSerializationInclusion(Include.NON_NULL);
要么:
@JsonInclude(Include.NON_NULL)
class Foo
{
String bar;
}
或者,您可以在getter中使用 @JsonInclude ,以便在值不為null時顯示該屬性 .
2 years ago
如果使用Spring,則為全局配置
@Configuration
public class JsonConfigurations {
@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.serializationInclusion(JsonInclude.Include.NON_NULL);
builder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
builder.failOnUnknownProperties(false);
return builder;
}
}
2 years ago
Jackson 2.x使用
mapper.getSerializationConfig().withSerializationInclusion(JsonInclude.Include.NON_NULL);
2 years ago
使用Jackson> 1.9.11和<2.x使用 @JsonSerialize 注釋來執行此操作:
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
2 years ago
如果要將此規則添加到Jackson 2.6中的所有模型,請使用:
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
2 years ago
這在 Spring boot 2.0.3 and Jackson 2.0 為我工作
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ApiDTO
{
// your class variable and
// methods
}
2 years ago
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
應該管用 .
Include.NON_EMPTY 表示如果屬性的值不為null且不為空,則序列化該屬性 . Include.NON_NULL 表示如果屬性值不為null,則序列化該屬性 .
2 years ago
這已經困擾了我很長一段時間,我終于找到了這個問題 . 問題是由于導入錯誤 . 早些時候我一直在使用
com.fasterxml.jackson.databind.annotation.JsonSerialize
哪個已被棄用 . 只需替換導入
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
并用它作為
@JsonSerialize(include=Inclusion.NON_NULL)
2 years ago
在我的情況下
@JsonInclude(Include.NON_EMPTY)
使它工作 .
2 years ago
您可以使用以下映射器配置:
mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);
自2.5以來你可以用戶:
mapper.setSerializationInclusion(Include.NON_NULL);
2 years ago
在Jackson 2.x中,使用:
@JsonInclude(JsonInclude.Include.NON_NULL)
2 years ago
只是為了擴展其他答案 - 如果你需要在每個字段的基礎上控制遺漏空值,請注釋相關字段(或者注釋字段的'getter') .
example - 這里只有 fieldOne 將從json中省略,如果它為null . 無論是否為空,都將包含 fieldTwo .
public class Foo {
@JsonInclude(JsonInclude.Include.NON_NULL)
private String fieldOne;
private String fieldTwo;
}
要將類中的所有空值省略為默認值,請注釋該類 . 如有必要,仍可使用按字段/ getter注釋覆蓋此默認值 .
example - 這里 fieldOne 和 fieldTwo 將分別從json中省略,因為這是類注釋的默認設置 . 但是,由于字段上的注釋, fieldThree 將覆蓋默認值并始終包含在內 .
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Foo {
private String fieldOne;
private String fieldTwo;
@JsonInclude(JsonInclude.Include.ALWAYS)
private String fieldThree;
}
UPDATE
以上是 Jackson 2 . 對于 earlier versions 的 Jackson 你需要使用:
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
代替
@JsonInclude(JsonInclude.Include.NON_NULL)
如果這個更新很有用,請在下面提到ZiglioUK的答案,它在我更新我的答案之前很久就指出了更新的Jackson 2注釋!
2 years ago
對于Jackson 2.5使用:
@JsonInclude(content=Include.NON_NULL)
2 years ago
如果在 Spring Boot 中,您可以直接通過屬性文件自定義jackson ObjectMapper .
示例 application.yml :
spring:
jackson:
default-property-inclusion: non_null # only include props if non-null
可能的值是:
always|non_null|non_absent|non_default|non_empty
2 years ago
如果您正在嘗試序列化對象列表并且其中一個為null,那么您最終將在json中包含null項,即使
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
將導致:
[{myObject的},空]
得到這個:
[{myObject的}]
人們可以這樣做:
mapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer() {
@Override
public void serialize(Object obj, JsonGenerator jsonGen, SerializerProvider unused)
throws IOException
{
//IGNORES NULL VALUES!
}
});
提示:如果您正在使用DropWizard,則可以使用environment.getObjectMapper()檢索Jersey使用的ObjectMapper .
2 years ago
你可以設置 application.properties :
spring.jackson.default-property-inclusion=non_null
或 application.yaml :
spring:
jackson:
default-property-inclusion: non_null
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的java如何忽略过程值_如果值为null,如何告诉Jackson在序列化期间忽略某个字段?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java内部类写法_Java学习-内部类
- 下一篇: pdf 中的java运行,java -