Jackson:是否可以用@JsonSerialize注释替换序列化程序集(例如,使用ObjectMapper)?
快速问题:是否可以使用ObjectMapper覆盖Jackson:是否可以用@JsonSerialize注释替换序列化程序集(例如,使用ObjectMapper)?,json,jackson,spring-security-oauth2,Json,Jackson,Spring Security Oauth2,快速问题:是否可以使用ObjectMapper覆盖@JsonSerialize注释(使用属性) 我集成了spring-security-oauth2,我想定制OAuth2Exception序列化为JSON格式的方式。问题是这个类使用 @JsonSerialize(using = OAuth2ExceptionJackson2Serializer.class) 我尝试将自定义序列化程序注册到: SimpleModule module = new SimpleModule() module.add
@JsonSerialize
注释(使用
属性)
我集成了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)
SimpleModule=newsimpleModule()
addSerializer(OAuth2Exception,新的JsonSerializer(){
@凌驾
void serialize(OAuth2Exception值、JsonGenerator jgen、SerializerProvider提供程序)引发IOException、JsonProcessingException{
jgen.writeString(“{”test:“test”}”)
}
})
ObjectMapper ObjectMapper=新的ObjectMapper()
objectMapper.registerModule(模块)
但它不起作用-使用了带有@JsonSerialize
的序列化程序集,而不是自定义的序列化程序集
是否有其他方法将序列化程序集替换为@JsonSerialize
PS:示例代码是用
groovy
编写的,因为在这种情况下,Jackson有一种称为的机制
您可以创建一个覆盖初始注释的类
@JsonSerialize(using=MySerializer.class)
public static abstract class OAuth2ExceptionMixIn {
}
然后在对象映射器中注册它:
objectMapper.addMixIn(OAuth2Exception.class, OAuth2ExceptionMixIn.class);
就这样。现在Jackson应该使用您的MySerializer
而不是初始的OAuth2ExceptionJackson2Serializer
.也许混合注释可以帮助。。。检查一下:还有一个提示:您甚至可以删除自定义序列化程序,并完全通过mixin控制序列化。无论您喜欢什么。@LukaszWiktor是否可以在不使用customserializer的情况下,仅使用mixin对响应进行完整的编程控制?@Kalinga这取决于所需的输出格式。Jackoson提供了许多选项来塑造输出JSON结构-您可以使用
@JsonProperty
重命名字段,使用@JsonIgnore
忽略其中一些字段,并进行更多微调@JsonSerializer
和转换器
。我很少需要编写自定义序列化程序。如果您有一个特定的用例,只需发布一个问题并让我知道。根据您的回答,我使用了自定义序列化程序。它起作用了。只是想检查是否有更多的选项,而不是忽略和属性。谢谢你