忽略所有属性但列出的属性的 Jackson 字段注释
Jackson field annotation that ignores all properties but those listed
是否有字段 and/or getter 的 Jackson 注释忽略字段值的所有属性,除了列出的属性?
当应用于字段时,它类似于 @JsonIgnoreProperties
,只是它不包括除列出的属性之外的所有属性,而是排除除列出的属性之外的所有属性。
例如,如果注释被命名为 @JsonIncludeProperties
:
class A {
final int a = 1;
final int b = 1;
... // final int c = 1; through final int y = 1;
final int z = 1;
}
class B {
@JsonProperty
@JsonIncludeProperties({"m", "o"})
A a1;
@JsonProperty
A a2;
}
将序列化为:
{
"a1": {
"m": 1,
"o": 1
},
"a2": {
"a": 1,
"b": 1,
... // "c": 1, through "y": 1,
"z": 1
}
}
您可以使用 the Jackson filters 和自定义注释来实现。这是一个例子:
public class JacksonIncludeProperties {
@Retention(RetentionPolicy.RUNTIME)
@interface JsonIncludeProperties {
String[] value();
}
@JsonFilter("filter")
@JsonIncludeProperties({"a", "b1"})
static class Bean {
@JsonProperty
public final String a = "a";
@JsonProperty("b1")
public final String b = "b";
@JsonProperty
public final String c = "c";
}
private static class IncludePropertiesFilter extends SimpleBeanPropertyFilter {
@Override
protected boolean include(final PropertyWriter writer) {
final JsonIncludeProperties includeProperties =
writer.getContextAnnotation(JsonIncludeProperties.class);
if (includeProperties != null) {
return Arrays.asList(includeProperties.value()).contains(writer.getName());
}
return super.include(writer);
}
}
public static void main(String[] args) throws JsonProcessingException {
final ObjectMapper objectMapper = new ObjectMapper();
final SimpleFilterProvider filterProvider = new SimpleFilterProvider();
filterProvider.addFilter("filter", new IncludePropertiesFilter());
objectMapper.setFilters(filterProvider);
System.out.println(objectMapper.writeValueAsString(new Bean()));
}
}
如果您指的是@JsonIncludeProperties,它包含在 jackson-databind 库的 2.12 中。问题的完整细节在这里 https://github.com/FasterXML/jackson-databind/issues/1296. With spring boot it will be available with 2.5.x version see here https://docs.spring.io/spring-boot/docs/2.5.x/reference/html/appendix-dependency-versions.html#dependency-versions
是否有字段 and/or getter 的 Jackson 注释忽略字段值的所有属性,除了列出的属性?
当应用于字段时,它类似于 @JsonIgnoreProperties
,只是它不包括除列出的属性之外的所有属性,而是排除除列出的属性之外的所有属性。
例如,如果注释被命名为 @JsonIncludeProperties
:
class A {
final int a = 1;
final int b = 1;
... // final int c = 1; through final int y = 1;
final int z = 1;
}
class B {
@JsonProperty
@JsonIncludeProperties({"m", "o"})
A a1;
@JsonProperty
A a2;
}
将序列化为:
{
"a1": {
"m": 1,
"o": 1
},
"a2": {
"a": 1,
"b": 1,
... // "c": 1, through "y": 1,
"z": 1
}
}
您可以使用 the Jackson filters 和自定义注释来实现。这是一个例子:
public class JacksonIncludeProperties {
@Retention(RetentionPolicy.RUNTIME)
@interface JsonIncludeProperties {
String[] value();
}
@JsonFilter("filter")
@JsonIncludeProperties({"a", "b1"})
static class Bean {
@JsonProperty
public final String a = "a";
@JsonProperty("b1")
public final String b = "b";
@JsonProperty
public final String c = "c";
}
private static class IncludePropertiesFilter extends SimpleBeanPropertyFilter {
@Override
protected boolean include(final PropertyWriter writer) {
final JsonIncludeProperties includeProperties =
writer.getContextAnnotation(JsonIncludeProperties.class);
if (includeProperties != null) {
return Arrays.asList(includeProperties.value()).contains(writer.getName());
}
return super.include(writer);
}
}
public static void main(String[] args) throws JsonProcessingException {
final ObjectMapper objectMapper = new ObjectMapper();
final SimpleFilterProvider filterProvider = new SimpleFilterProvider();
filterProvider.addFilter("filter", new IncludePropertiesFilter());
objectMapper.setFilters(filterProvider);
System.out.println(objectMapper.writeValueAsString(new Bean()));
}
}
如果您指的是@JsonIncludeProperties,它包含在 jackson-databind 库的 2.12 中。问题的完整细节在这里 https://github.com/FasterXML/jackson-databind/issues/1296. With spring boot it will be available with 2.5.x version see here https://docs.spring.io/spring-boot/docs/2.5.x/reference/html/appendix-dependency-versions.html#dependency-versions