spring - 如何在 Spring MVC(不是 Spring Boot)应用程序中自定义 Jackson
问题描述
Spring MVC 4.3.29 和 Java 8(当前平台约束),主要是 XML 配置,除了一些经过注释扫描的 Controller 类。
简而言之,我想让ObjectMapper
Spring JSON 反序列化自动使用的实例,我想将其设置FAIL_ON_UNKNOWN_PROPERTIES
回true
.
我看到了几个 相关的 问题,但所有示例似乎都是Spring Boot和/或 Java 配置。在我的 WebSphere 环境中,所有建议的@Autowired
bean(Mapper、Builder 等)都没有任何值。
希望我只是在某处遗漏了一些简单的胶水。
编辑:呸,我以为我有这个:
@Configuration
public class CustomWebConfiguration extends WebMvcConfigurerAdapter {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof MappingJackson2HttpMessageConverter) {
((MappingJackson2HttpMessageConverter) converter).getObjectMapper().
enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
break;
}
}
}
}
使用我的调试器,我可以看到它被击中并改变了预期的标志。但是在使用时,该行为无效。我不再有任何 XML 覆盖,但我仍然有“主人” <mvc:annotation-driven/>
。我想知道这些是否相互混淆......
解决方案
Ok, yes, this works as long as it's combined with @EnableWebMvc
rather than <mvc:annotation-driven/>
:
@EnableWebMvc
@Configuration
public class CustomWebConfiguration extends WebMvcConfigurerAdapter {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof MappingJackson2HttpMessageConverter) {
((MappingJackson2HttpMessageConverter) converter).getObjectMapper().
enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
break;
}
}
}
}
推荐阅读
- python-3.x - 从 Detectron2 中提取对象特征
- prolog - Prolog 查询:加法对递归查询有何影响
- python-3.x - 异步和线程:为什么线程 ID 总是相同的?
- python - 尝试启动 Jupyter python 交互时 VSCode 抛出错误
- php - 使用 PHP 在 Google Drive API 中获取验证码的问题
- typescript - Type Guard 确保变量是 TypeScript 中的对象
- r - R中是否有任何函数可以在散点图的圆圈内给出标签?
- vb.net - 如何解决 UPDATE 语句中的语法错误
- javascript - 从两个父容器访问数据 - ReactJS
- python - 如何通过 sanic 获取主机名?