杰克逊:是否可以用@jsonserialize注释替换序列化设置(例如,使用ObjectMapper)



快速问题:使用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

对于这种情况,杰克逊的机制称为混合注释。

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

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

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

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

就是这样。现在,杰克逊应该使用您的MySerializer而不是初始OAuth2ExceptionJackson2Serializer

相关内容

最新更新