You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中@JsonIgnoreProperties(ignoreUnknown=false)不生效问题

解决@JsonIgnoreProperties(ignoreUnknown = false)在Controller上不生效的问题

嘿,我来帮你搞定这个问题~你现在遇到的情况是因为对@JsonIgnoreProperties注解的作用对象理解错啦,它根本不是给Controller类用的,所以加在Controller上自然没效果。

为什么注解不生效?

@JsonIgnoreProperties是Jackson框架用来控制JSON反序列化/序列化时实体类字段规则的注解,它的作用目标是你用来接收请求参数的实体类(JavaBean),而不是Controller类。把它加在Controller上,Jackson根本不会识别这个配置哦。

正确的解决步骤

1. 把注解加在接收请求的实体类上

找到你用来接收前端请求参数的实体类(比如User.java),将@JsonIgnoreProperties(ignoreUnknown = false)标注在类上:

@JsonIgnoreProperties(ignoreUnknown = false)
public class User {
    private String username;
    private Integer age;
    
    // 这里记得加上getter、setter方法,或者用Lombok的@Data注解简化代码
}

2. 在Controller接口中用该实体类接收参数

在你的Controller接口方法里,用这个实体类配合@RequestBody接收请求体:

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

    @PostMapping("/user")
    public ResponseEntity<String> addUser(@RequestBody User user) {
        LOG.info("接收到用户信息: {}", user);
        return ResponseEntity.ok("用户创建成功");
    }
}

这样当请求体里包含User类没有定义的字段时,Jackson就会抛出JsonMappingException,Spring Boot会自动返回400 Bad Request的错误响应。

3. 全局配置(可选,适合所有接口都需要校验的场景)

如果你想让所有接口都校验未知字段,不用给每个实体类加注解,可以配置Jackson的全局规则:

@Configuration
public class JacksonGlobalConfig {
    @Bean
    public ObjectMapper customObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 开启未知字段报错的全局配置
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
        return objectMapper;
    }
}

这个配置会对所有使用@RequestBody接收参数的接口生效,只要请求里有未知字段就会触发错误。

额外注意点

检查一下项目中有没有其他Jackson配置,比如有没有地方把FAIL_ON_UNKNOWN_PROPERTIES设置为false,如果有会覆盖你的配置,导致注解或全局配置不生效哦。

内容的提问来源于stack exchange,提问作者Jagrut Dalwadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:14:58