Jackson:是否可以用 @JsonSerialize 注释(例如使用 ObjectMapper)替换序列化器集?

Szy*_*iak 4 json jackson spring-security-oauth2

简单的问题:是否可以使用 ObjectMapper 覆盖@JsonSerialize注释(using属性)?

我已经spring-security-oauth2集成了,我想自定义OAuth2Exception序列化为 JSON 格式的方式。问题是这个类使用

@JsonSerialize(using = OAuth2ExceptionJackson2Serializer.class)
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下方式注册自定义序列化器:

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)
Run Code Online (Sandbox Code Playgroud)

但它不起作用 -@JsonSerialize使用设置的序列化器而不是自定义序列化器。

还有其他方法可以替换序列化器集吗@JsonSerialize

PS:示例代码是这样写的groovy

Luk*_*tor 5

对于这种情况,Jackson 有一种称为混合注释的机制。

您可以创建一个覆盖初始注释的类。

@JsonSerialize(using=MySerializer.class)
public static abstract class OAuth2ExceptionMixIn {

}
Run Code Online (Sandbox Code Playgroud)

然后将其注册到对象映射器中:

objectMapper.addMixIn(OAuth2Exception.class, OAuth2ExceptionMixIn.class);
Run Code Online (Sandbox Code Playgroud)

就是这样。现在杰克逊应该使用你的MySerializer而不是最初的 OAuth2ExceptionJackson2Serializer .