Spring REST自定义反序列化

时间:2018-07-31 15:42:19

标签: spring-mvc spring-boot

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

例如

{ "user":"abc" }

我希望在我的控制器方法对其进行处理之前先点击自定义解串器。

我该怎么做?我可以访问用户对象,但是不能将该对象注释为它在我的项目外部。

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

1 个答案:

答案 0 :(得分:1)

您必须创建objectMapper bean实现,其中包含一个mixIn:

@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 {