【问题标题】:Spring Boot Web- Set FAIL_ON_UNKNOWN_PROPERTIES to false in JacksonSpring Boot Web-在 Jackson 中将 FAIL_ON_UNKNOWN_PROPERTIES 设置为 false
【发布时间】:2014-02-11 07:08:56
【问题描述】:

我已阅读 Spring Boot 文档 (http://projects.spring.io/spring-boot/docs/docs/howto.html#message.converters) 并提到如果您提供自己的 JacksonConvertor,它将覆盖默认值。但我猜它不适用于下面的代码。

我要做的是将对象映射器的 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES 设置为 false。

@EnableAutoConfiguration
@ComponentScan("com.hjh")
@Configuration
public class App {

    @Bean
    @Primary
    public MappingJackson2HttpMessageConverter jacksonConvertor(){
        MappingJackson2HttpMessageConverter convertor= new MappingJackson2HttpMessageConverter();
        ObjectMapper mapper = new ObjectMapper();
        mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        convertor.setObjectMapper(mapper);
        return convertor;
    }

    public static void main(String[] args) throws Exception {
        ApplicationContext ctx =   SpringApplication.run(App.class, args);

    }

谁能指出我在这里做错了什么?因为它不断尝试从请求中绑定未知道具。如果我删除了未知的道具,一切顺利

【问题讨论】:

  • 这是什么版本的 Boot(我建议升级到最新的快照)?另外请发布堆栈跟踪,否则我们真的不知道出了什么问题。
  • 将版本从 0.5.0.M6 升级到 0.5.0.M7。一切都按预期工作。谢谢戴夫

标签: spring jackson spring-boot


【解决方案1】:

从 Spring Boot 1.2.0.RC2 开始,FAIL_ON_UNKNOWN_PROPERTIES 默认设置为 false。可以通过给application.properties添加属性来重新开启:

spring.jackson.deserialization.fail-on-unknown-properties=true

【讨论】:

  • 我尝试对我的 Spring Boot 应用程序(1.1.9 RELEASE)进行此更改,但它并没有改变行为。但是,将主 Bean 添加到我的配置类(如 OPs 发布中所示)确实解决了我的问题
  • 这里也一样。我有一个单元测试,当发布到带有它无法识别的字段的休息端点时,预计会出现 400 错误。当我的应用程序从 Spring Boot 1.2.0.M2 升级到 1.2.0.RC2 时,这个测试开始失败。将属性 spring.jackson.deserialization.fail-on-unknown-properties=true 添加到 application.properties 也绝对没有效果。
  • 我发现通过 spring 配置文件“application.properties”设置“spring.jackson.deserialization.fail-on-unknown-properties”或任何其他杰克逊属性只会影响 ObjectMapper,如果它被定义为一个 Bean。因此,如果您通过例如“new ObjectMapper()”创建自己的对象映射器,那么属性将无效。
【解决方案2】:

我建议升级到最新的快照。 “1.0.0.BUILD-SNAPSHOT”是最新的(希望今天晚些时候推出 RC1)。

【讨论】:

  • 我可以知道最终发布时间表的时间表吗?
  • 通常我们希望有 1 或 2 个候选版本,每个版本间隔一到两周,然后是最终版本。可以更多,也可以更长。这完全取决于报告的问题数量。
猜你喜欢
  • 1970-01-01
  • 2019-07-06
  • 2019-06-07
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
  • 2012-05-12
  • 1970-01-01
相关资源
最近更新 更多