我的课程有@JsonIgnore-d
字段:
public class MyClass {
...
@JsonIgnore
private SomeType myfield;
...
// getters & setters
}
是否可以配置ObjectWriter
,以便在序列化期间包含myfield
即使正在加入?
基本原理:MyClass在很多地方被序列化,只有我希望拥有myfield
的单个特定序列。
答案 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
这只是禁用所有注释。
希望这可以提供帮助。