【问题标题】:JsonIgnoreProperties not working with spring bootJsonIgnoreProperties 不适用于 Spring Boot
【发布时间】:2018-10-18 15:08:46
【问题描述】:

目前,Spring Boot示例应用已经正常创建。在请求中,如果有任何未知字段到来,那么我们需要抛出一个错误。

为此使用了@JsonIgnoreProperties(ignoreUnknown = false) 注释。但是,当我访问 URL 时,它不起作用。

请找到代码sn-p如下:

    @RestController @RequestMapping(value = "/")
    @JsonIgnoreProperties(ignoreUnknown = false) public class
    UserController {
        private final Logger LOG = LoggerFactory.getLogger(getClass());

        private final UserRepository userRepository;

        private final UserDAL userDAL;

        public UserController(UserRepository userRepository, UserDAL userDAL){
            this.userRepository = userRepository;       
            this.userDAL = userDAL;     
        }

        @RequestMapping(
            value = "/create", method = RequestMethod.POST,
            consumes = MediaType.APPLICATION_JSON_VALUE, 
            produces = MediaType.APPLICATION_JSON_VALUE
        )   
        public User addNewUsers(@RequestBody @Valid User user) 
            throws JsonProcessingException {        


            LOG.info("Saving user.");

            CardInfo cardInfo = new CardInfo();
            cardInfo.setCardId("12345678901");      
            user.setCardInfo(cardInfo);
            ObjectMapper mapper = new ObjectMapper();

            String jsonString = mapper.writeValueAsString(cardInfo);
            user.setCardInfo1(jsonString);  
            userDAL.getAllUsers();      

            return userRepository.save(user);   
        }

请按以下方式查找示例 Pom: http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

<groupId>com.journaldev.spring</groupId>
<artifactId>spring-boot-mongodb</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>spring-boot-mongodb</name>
<description>Spring Boot MongoDB Example</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

【问题讨论】:

    标签: spring-boot jackson


    【解决方案1】:

    您至少有 3 个选项:

    1. @JsonIgnoreProperties 放在您反序列化的类上,而不是放在 Spring 控制器中。

      • 但是,我看到您要反序列化的类是 com.journaldev.bootifulmongodb.model.User,所以很可能您无法修改它。
    2. 配置您的ObjectMapper 实例:

       mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
    
    1. Customize Spring Boot's Jackson Object Mapper - 通过设置正确的环境属性:

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

    更多信息,请参考section 76.3 of Spring Boot's reference

    【讨论】:

    • 选项#3 有效。但是,选项#1 没有给出预期的行为。
    • 是的,选项 3 对我有用。 #1 不起作用。
    猜你喜欢
    • 2015-04-13
    • 2021-09-18
    • 2018-07-04
    • 2023-03-26
    • 2019-02-24
    • 2016-04-02
    • 2020-03-19
    • 2019-11-18
    • 2015-03-29
    相关资源
    最近更新 更多