序列化@JsonIgnore-d字段

时间:2016-07-05 16:49:10

标签: java jackson

我的课程有@JsonIgnore-d字段:

public class MyClass {
    ...
    @JsonIgnore
    private SomeType myfield;
    ...
    // getters & setters
}

是否可以配置ObjectWriter,以便在序列化期间包含myfield即使正在加入? 基本原理:MyClass在很多地方被序列化,只有我希望拥有myfield的单个特定序列。

1 个答案:

答案 0 :(得分:8)

可以配置 DECLARE SOME_RESULT TP_SOME_TABLE; BEGIN EXECUTE IMMEDIATE 'SELECT TP_SOME_TYPE(''TEXT'' , 1) FROM DUAL' BULK COLLECT INTO SOME_RESULT; END; 以禁用JsonIgnore功能。以下是您可以尝试的一些可能的解决方案:

<强> 1。 禁用特定注释字段的JsonIgnore函数。

您可以创建自定义JsonIgnore注释和自定义ObjectMapper以从映射器上下文中删除注释。 以下是这些想法:

注释JacksonAnnotationIntrospector到序列化时应忽略的字段:

@MyJsonIgnore

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY) public class MyClass { @MyJsonIgnore private SomeType myField; } 是一个简单的自定义注释,包含@MyJsonIgnore

@JsonIgnore

实现了自定义@Retention(RetentionPolicy.RUNTIME) @JacksonAnnotationsInside @JsonIgnore public @interface MyJsonIgnore { } 以从映射器上下文中删除JacksonAnnotationIntrospector

@MyJsonIgnore

之后,您可以在配置期间在public class DisablingMyJsonIgnoreIntrospector extends JacksonAnnotationIntrospector { @Override public boolean isAnnotationBundle(final Annotation ann) { if (ann.annotationType().equals(MyJsonIgnore.class)) { return false; } else { return super.isAnnotationBundle(ann); } } 上设置introspector:

ObjectMapper

结果是用ObjectMapper mapper = new ObjectMapper(); mapper.setAnnotationIntrospector(new DisablingMyJsonIgnoreIntrospector()); 注释的字段可以正确编组。

<强> 2。 禁用映射器的JsonIgnore函数

您可以创建自定义@MyJsonIgnore并覆盖JacksonAnnotationIntrospector方法,以便始终返回hasIgnoreMarker

false

public static class DisablingJsonIgnoreIntrospector extends JacksonAnnotationIntrospector { @Override public boolean hasIgnoreMarker(final AnnotatedMember m) { return false; } } 是检查是否有注释忽略json属性。返回hasIgnoreMarker将禁用JsonIngore函数。

第3。 禁用所有注释并指定为给定false自动检测的属性类型:

ObjectMapper

这只是禁用所有注释。

希望这可以提供帮助。