spring-mvc - Spring REST 自定义反序列化
问题描述
是否可以配置spring来反序列化传入的json。
所以例子
{ "user":"abc" }
我希望它在由我的控制器方法处理之前点击我的自定义反序列化器。
我怎样才能做到这一点?我可以访问一个用户对象,但该对象不能被注释为我的项目的外部对象。
但我仍然想填充该对象并通过 REST 方法将其传递给它。
解决方案
您必须创建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 {
推荐阅读
- java - 处理像素数据时如何淡化 BufferedImage?
- sql-server - SQl 计算百分比避免存储过程中的 Div/0 错误
- identityserver4 - IdentityServer4 - API 服务器如何与 Identity Server 通信
- javascript - 如何在输入元素中设置下拉箭头按钮的样式
- python - Pandas DF:如何根据外部变量添加列值
- python - zsh:/usr/local/bin/pipenv:错误的解释器:/usr/local/opt/python/bin/python3.7:没有这样的文件或目录
- django - 要求用户在基于 Django 的站点上再次登录
- c++ - 为二维向量赋值
- c# - 是否有任何理由不在 C# ASP.NET 中使您的公共主类静态化
- android - 在 Android webview 中加载 Instagram URL 时遇到问题