首页 > 解决方案 > Spring REST 自定义反序列化

问题描述

是否可以配置spring来反序列化传入的json。

所以例子

{ "user":"abc" }

我希望它在由我的控制器方法处理之前点击我的自定义反序列化器。

我怎样才能做到这一点?我可以访问一个用户对象,但该对象不能被注释为我的项目的外部对象。

但我仍然想填充该对象并通过 REST 方法将其传递给它。

标签: spring-mvcspring-boot

解决方案


您必须创建objectMapper包含 mixIn 的 bean 实现:

@Bean
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.addMixIn(MyObject.class, MyObjectMixin.class);
    return mapper;
}

然后混合将是这样的:

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE,
    isGetterVisibility = JsonAutoDetect.Visibility.NONE)
@JsonDeserialize(using = MyObjectDeserializer.class)
public class MyObjectMixin {

}

最后,反序列化器必须使用以下方法扩展JsonDeserializer

@Override
public MyObject deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {

推荐阅读