Spring Boot进行参数校验的方法实例详解
什么是参数校验
参数校验是指在方法调用时,检查方法参数的合法性。如果不合法,则直接抛出IllegalArgumentException 异常,避免了程序继续执行而造成更严重的后果。
Spring Boot参数校验的实现方式
在Spring Boot中,提供了javax.validation API来进行参数校验。使用方法如下:
1.引入相应的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.在需要进行校验的参数上添加注解,比如@NotNull、@Min、@Max等注解,示例如下:
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@Min(value = 18, message = "年龄不能小于18岁")
private int age;
// getter和setter方法省略
}
说明:@NotNull注解表示该参数不能为空,@Min注解表示该参数的值要大于等于指定值。
3.在Controller层中使用@Validated注解,并在需要校验的参数前添加@Valid注解,示例如下:
@RestController
@RequestMapping("/user")
@Validated
public class UserController {
@PostMapping("/add")
public String addUser(@Valid @RequestBody User user) {
// 省略业务代码
}
}
说明:@Validated注解用于开启Spring对校验注解的支持,@Valid注解表示要对该参数进行参数校验。
4.定义异常处理类来处理校验异常,示例如下:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e){
// 获取校验错误信息
String msg = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining(","));
// 返回错误信息
return Result.error(msg);
}
}
说明:@ExceptionHandler注解用于处理MethodArgumentNotValidException异常,getBindingResult()方法获取校验错误信息,使用stream和map进行处理返回格式化后的错误信息。
参数校验示例
示例一
定义一个UserController用于添加用户信息,其中用户信息不能为空,年龄不能小于18岁。如果用户信息不合法,则返回错误信息。
User.java
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@Min(value = 18, message = "年龄不能小于18岁")
private int age;
// getter和setter方法省略
}
UserController.java
@RestController
@RequestMapping("/user")
@Validated
public class UserController {
@PostMapping("/add")
public String addUser(@Valid @RequestBody User user) {
// 省略业务代码
}
}
GlobalExceptionHandler.java
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e){
// 获取校验错误信息
String msg = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining(","));
// 返回错误信息
return Result.error(msg);
}
}
示例二
定义一个GoodsController用于添加商品信息,其中商品信息不能为空,商品价格必须大于0。如果商品信息不合法,则返回错误信息。
Goods.java
public class Goods {
@NotNull(message = "商品名不能为空")
private String name;
@DecimalMin(value = "0", inclusive = false, message = "价格必须大于0")
private BigDecimal price;
// getter和setter方法省略
}
GoodsController.java
@RestController
@RequestMapping("/goods")
@Validated
public class GoodsController {
@PostMapping("/add")
public String addGoods(@Valid @RequestBody Goods goods) {
// 省略业务代码
}
}
GlobalExceptionHandler.java
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e){
// 获取校验错误信息
String msg = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining(","));
// 返回错误信息
return Result.error(msg);
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring boot进行参数校验的方法实例详解 - Python技术站