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

如何校验Postman传入的错误参数?REST接口接收额外参数仍返回成功

解决额外参数传入时接口仍返回成功的问题

我明白你的困扰——明明给请求体加了@Valid校验,但传入多余字段(比如你例子里的"user":"admin")时接口居然还返回成功,这确实不符合预期。其实问题出在Spring默认会忽略请求体里的未知字段,@Valid注解只负责校验你定义的字段是否符合规则(比如非空、格式正确等),并不会校验是否存在多余字段。

下面给你两种可行的解决方案:

方案一:在DTO类上添加注解,单独控制该类的未知字段校验

在你的请求体对应的DTO类上添加@JsonIgnoreProperties(ignoreUnknown = false)注解,这样Jackson在反序列化时遇到未知字段就会抛出异常,Spring会自动返回400 Bad Request的错误响应。

示例代码:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.validation.constraints.NotNull; // 若使用Spring Boot 2.x,替换为javax.validation.constraints.NotNull

@JsonIgnoreProperties(ignoreUnknown = false)
public class VehicleRequest {
    @NotNull(message = "vehicleModelId不能为空")
    private Long vehicleModelId;
    
    @NotNull(message = "vehicleTypeId不能为空")
    private Long vehicleTypeId;
    
    @NotNull(message = "vehicleManufacturerId不能为空")
    private Long vehicleManufacturerId;
    
    @NotNull(message = "ptoId不能为空")
    private Long ptoId;
    
    @NotNull(message = "orgId不能为空")
    private Long orgId;

    // 省略getter、setter方法
}

方案二:全局配置,对所有DTO生效

如果你希望所有接口的请求体都不允许出现未知字段,可以在Spring Boot的配置文件里添加全局配置:

application.properties 写法

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

application.yml 写法

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

配置生效后,任何请求体包含DTO未定义的字段时,都会触发Jackson的反序列化异常,接口直接返回400错误。

额外注意事项

请确保你的Controller方法里确实正确使用了@Valid注解,比如:

@RestController
@RequestMapping("/vehicles")
public class VehicleController {
    @PostMapping
    public ResponseEntity<?> createVehicle(@Valid @RequestBody VehicleRequest request) {
        // 业务逻辑处理
        return ResponseEntity.ok("创建成功");
    }
}

把上面的配置和正确的@Valid使用结合起来,就能实现“传入额外参数时返回错误响应”的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:15:11