- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我看到了很多关于ignoring certain annotations的问题和解答,甚至禁用所有注释:
.configure(MapperFeature.USE_ANNOTATIONS, false)
但是
java.beans.ConstructorProperties
。如何忽略 @JsonSerialize
并在生成的 JSON 中保留类型信息,同时仍支持其他注释,例如 ConstructorProperties
?
这是我到目前为止所拥有的:
private static ObjectMapper configureObjectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.OBJECT_AND_NON_CONCRETE, JsonTypeInfo.As.PROPERTY);
mapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector() {
@Override
protected TypeResolverBuilder<?> _findTypeResolver(MapperConfig<?> config, Annotated ann, JavaType baseType) {
if (ann.hasAnnotation(JsonSerialize.class) || ann.hasAnnotation(JsonDeserialize.class)) {
return StdTypeResolverBuilder.noTypeInfoBuilder(); // or null
}
return super._findTypeResolver(config, ann, baseType);
}
});
return mapper;
}
// or the same config using a JsonMapper builder
但是由于某种原因,这仍然会处理@JsonSerialize
。我使用的是 Jackson 2.10.0.pr3。
我面临的真正问题是我正在序列化第三方对象,其中包含出于不相关目的提供的@JsonSerialize
,但没有定义@JsonDeserialize
。尽管它们在没有这些注释的情况下可以完美序列化,但它们最终会阻止我们的反序列化。同时,我事先并不知道它们是哪些类,因此应该在生成的 JSON 中对它们进行编码。此外,其中一些对象是使用 Lombok 生成的,导致使用 java.beans.ConstructorProperties 注释的无参数构造函数,Jackson 在正常情况下可以很好地处理这些构造函数。
这是我无法解决的上述配置组合。
最佳答案
您是否尝试过重写JacksonAnnotationIntrospector#findSerializer
方法:
class SkipSerializersJacksonAnnotationIntrospector extends JacksonAnnotationIntrospector {
private final List<Class> classesToSkip = new ArrayList<>();
public SkipSerializersJacksonAnnotationIntrospector() {
classesToSkip.add(YourClass.class);
}
@Override
public Object findSerializer(Annotated a) {
if (classesToSkip.contains(a.getRawType())) {
return null;
}
return super.findSerializer(a);
}
}
它应该允许您跳过 JsonSerialize
注释并保留类型。
关于java - 如何与 DefaultTyping 结合仅忽略 @JsonSerialize 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58643271/
我看到了很多关于ignoring certain annotations的问题和解答,甚至禁用所有注释: .configure(MapperFeature.USE_ANNOTATIONS, false
我看到当 DefaultTyping 启用了 OBJECT_AND_NON_CONCRETE 时,Jackson 库无法序列化 Scala 枚举。环境。请注意,当我使用 JAVA_LANG_OBJEC
我刚开始使用Aqueduct创建API。 我在VS Code终端中运行 Aqueduct 服务时遇到一些错误 -- Aqueduct CLI Version: 3.2.1 -- Aqu
我已经在 CentOS 和 Ubuntu 的虚拟机环境中安装了 Apache。在这两种环境中,Apache 配置变量 DefaultType 均设置为 text/plain。 如果我有一个扩展名未知的
我是一名优秀的程序员,十分优秀!