Spring Controller请求大小校验报错:Cannot find method 'value'问题排查
问题分析与解决方案
你这种实现请求大小校验的方式不正确,出现"Cannot find method 'value'"错误的核心原因是:javax.validation.constraints.Size注解的作用是校验集合、数组或字符串类型字段的长度/元素数量,它不能直接嵌套在@RequestBody注解中使用——@RequestBody本身没有接收@Size作为参数的方法,这种语法不符合Java注解的使用规范。
根据你的需求(拦截超出特定大小的恶意请求),分两种场景给出正确实现方式:
场景1:限制请求体的总字节大小(无论内容)
如果要直接拦截请求体总大小超过阈值的请求,无需在代码中加注解,直接通过Spring配置即可:
在application.properties(或application.yml)中添加配置:
# 限制单个请求体的最大字节数,支持B/KB/MB单位,示例为200字节 spring.servlet.multipart.max-request-size=200B spring.servlet.multipart.max-file-size=200B # 若为非文件上传的JSON请求,额外配置(Spring WebFlux场景用这个) spring.codec.max-in-memory-size=200B
配置生效后,当请求体超过设定大小,Spring会直接返回413 Payload Too Large错误,提前拦截恶意请求。
场景2:校验请求对象中字段的长度
如果是要校验UserRequest对象内某个字段的长度(比如字符串字段不超过200字符),需按以下步骤操作:
- 在
UserRequest类的目标字段上添加@Size注解:
import javax.validation.constraints.Size; public class UserRequest { @Size(max = 200, message = "字段长度不能超过200字符") private String targetField; // 替换为实际要校验的字段名 // 其他字段及getter/setter }
- 在Controller方法的
@RequestBody参数上添加@Valid注解触发校验:
import javax.validation.Valid; @JsonRequestMapping(method = POST) public ResponseEntity<UserResponse> validate( @RequestBody @Valid UserRequest userRequest, @RequestHeader(required = false) String validation) { // 业务逻辑 }
- 确保项目引入了校验依赖,比如Spring Boot项目需添加:
<!-- Maven依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
内容的提问来源于stack exchange,提问作者Nullpointer
相关产品推荐
相关产品推荐

