Jackson:是否可以用@JsonSerialize 注释(例如用 ObjectMapper)替换序列化器集?
Jackson: is it possible to replace the serializer set with @JsonSerialize annotation (e.g. with ObjectMapper)?
快速提问:是否可以使用 ObjectMapper 覆盖 @JsonSerialize
注释(using
属性)?
我已经集成了 spring-security-oauth2
,我想自定义 OAuth2Exception
序列化为 JSON 格式的方式。问题是这个 class 使用
@JsonSerialize(using = OAuth2ExceptionJackson2Serializer.class)
我尝试使用以下方式注册自定义序列化程序:
SimpleModule module = new SimpleModule()
module.addSerializer(OAuth2Exception, new JsonSerializer<OAuth2Exception>() {
@Override
void serialize(OAuth2Exception value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeString('{"test":"test"}')
}
})
ObjectMapper objectMapper = new ObjectMapper()
objectMapper.registerModule(module)
但它不起作用 - 使用 @JsonSerialize
设置的序列化程序而不是自定义序列化程序。
有没有其他方法可以用@JsonSerialize
替换序列化器集?
PS:示例代码写在groovy
对于这种情况,Jackson 有一个名为 mix-in annotations 的机制。
您可以创建一个 class 来覆盖初始注释。
@JsonSerialize(using=MySerializer.class)
public static abstract class OAuth2ExceptionMixIn {
}
然后在对象映射器中注册:
objectMapper.addMixIn(OAuth2Exception.class, OAuth2ExceptionMixIn.class);
就是这样。现在 Jackson 应该使用你的 MySerializer
而不是最初的 OAuth2ExceptionJackson2Serializer
.
快速提问:是否可以使用 ObjectMapper 覆盖 @JsonSerialize
注释(using
属性)?
我已经集成了 spring-security-oauth2
,我想自定义 OAuth2Exception
序列化为 JSON 格式的方式。问题是这个 class 使用
@JsonSerialize(using = OAuth2ExceptionJackson2Serializer.class)
我尝试使用以下方式注册自定义序列化程序:
SimpleModule module = new SimpleModule()
module.addSerializer(OAuth2Exception, new JsonSerializer<OAuth2Exception>() {
@Override
void serialize(OAuth2Exception value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeString('{"test":"test"}')
}
})
ObjectMapper objectMapper = new ObjectMapper()
objectMapper.registerModule(module)
但它不起作用 - 使用 @JsonSerialize
设置的序列化程序而不是自定义序列化程序。
有没有其他方法可以用@JsonSerialize
替换序列化器集?
PS:示例代码写在groovy
对于这种情况,Jackson 有一个名为 mix-in annotations 的机制。
您可以创建一个 class 来覆盖初始注释。
@JsonSerialize(using=MySerializer.class)
public static abstract class OAuth2ExceptionMixIn {
}
然后在对象映射器中注册:
objectMapper.addMixIn(OAuth2Exception.class, OAuth2ExceptionMixIn.class);
就是这样。现在 Jackson 应该使用你的 MySerializer
而不是最初的 OAuth2ExceptionJackson2Serializer
.