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

如何让Spring Boot拒绝请求体中的额外JSON字段

解决Spring Boot请求体含额外字段不报错的问题

方法一:实体类级别控制

在你的Body实体类上添加Jackson的@JsonIgnoreProperties注解,设置ignoreUnknown = false,这样当请求体包含未知字段时,Jackson会直接抛出反序列化异常:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = false)
class Body {
   private String name;
   // 需添加对应getter、setter或无参构造方法,保证Jackson正常序列化
}

方法二:全局配置(所有接口生效)

如果希望整个服务的所有接口都拒绝含未知字段的请求,可以通过以下两种方式配置:

方式1:配置文件实现

在application.yml中添加:

spring:
  jackson:
    deserialization:
      fail-on-unknown-properties: true

或者在application.properties中添加:

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

方式2:代码配置类实现

创建自定义Jackson配置类,统一设置反序列化规则:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
        return objectMapper;
    }
}

自定义异常返回(可选)

默认情况下,Spring Boot会将Jackson的UnrecognizedPropertyException转换为400 Bad Request响应。如果需要自定义错误信息格式,可以通过@ControllerAdvice全局捕获异常:

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(UnrecognizedPropertyException.class)
    public ResponseEntity<String> handleUnrecognizedProperty(UnrecognizedPropertyException e) {
        String errorMsg = "请求体包含非法字段:" + e.getPropertyName();
        return new ResponseEntity<>(errorMsg, HttpStatus.BAD_REQUEST);
    }
}

注意事项

  • 若仅部分接口需要拒绝未知字段,优先使用实体类注解的方式,全局配置会影响所有接口的反序列化规则。
  • 确保实体类具备正确的getter/setter或无参构造方法,避免Jackson反序列化时出现其他异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:15:39