@RequestParam校验参数不为空
时间: 2025-01-12 10:11:06 浏览: 94
### Spring MVC 中 `@RequestParam` 非空校验
在 Spring MVC 应用程序中,为了确保通过 URL 传递的查询参数不为空,可以在方法参数上使用 `@RequestParam` 注解并结合 JSR-303 的约束验证注解来实现非空校验。
#### 使用 `@RequestParam` 和 `@NotNull`
当需要对接收到的请求参数进行非空校验时,在控制器的方法签名中添加相应的注解即可。具体来说:
对于简单的字符串类型的参数,可以通过如下方式定义接口[^2]:
```java
@PostMapping("/addGoods")
public ResponseEntity<String> addGoods(
@RequestParam @NotNull(message = "店铺编号不能为空") String shopSn,
@RequestParam @NotBlank(message = "商品描述不能为空") String goodsDesc) {
// 处理逻辑...
}
```
这里不仅限于基本数据类型,还可以对复杂对象中的字段应用类似的校验规则。如果希望整个请求体作为 JSON 对象被解析,则应考虑采用 `@RequestBody` 方式,并配合 DTO (Data Transfer Object) 来完成更复杂的业务场景下的输入校验[^1]。
#### 自动化全局异常处理
为了避免每次都需要手动捕获可能抛出的数据绑定异常或方法参数不当异常等问题,建议配置统一的全局异常处理器。这通常涉及到创建一个新的类继承自 `ResponseEntityExceptionHandler` 或者直接利用 AOP 切面编程技术来自定义错误响应机制[^3]。
```java
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
Map<String, Object> body = new LinkedHashMap<>();
body.put("timestamp", LocalDateTime.now());
body.put("status", status.value());
List<String> errors = ex.getBindingResult()
.getAllErrors().stream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.toList());
body.put("errors", errors);
return new ResponseEntity<>(body, headers, status);
}
}
```
此段代码展示了如何捕捉到由表单提交过程中产生的所有违反约束条件的情况,并返回给客户端一个结构化的 JSON 响应消息。
阅读全文
相关推荐


















