杰克逊:是否有可能用@JsonSerialize注释替换序列化器集(例如用ObjectMapper)?

时间:2015-05-08 12:05:06

标签: json jackson spring-security-oauth2

快速提问:是否可以使用ObjectMapper覆盖@JsonSerialize注释(using属性?)

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

@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

编写

1 个答案:

答案 0 :(得分:3)

对于这种情况,杰克逊有一种名为mix-in annotations的机制。

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

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

}

然后在对象映射器中注册它:

objectMapper.addMixIn(OAuth2Exception.class, OAuth2ExceptionMixIn.class);

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