常见的参数校验我们会写很多if条件去过滤,非常繁琐。
现在我们可以使用@NotBlank、@NotNull、@NotEmpty等等注解一键判断接口入参是否符合要求。
1、添加依赖
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
或者
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
2、添加注解 @Valid与@NotBlank等配合使用
@RestController
@RequestMapping("/valid")
public class ValidationController {
@PostMapping
public String Valid1(@RequestBody @Valid Params params){
return params.getUserName();
}
@Data
public static class Params {
@NotBlank(message = "用户名不能为空")
private String userName;
@NotBlank(message = "密码不能为空")
private String password;
}
}
3、全局异常处理
@RestControllerAdvice
public class GlobalExceptionHandler {
@ResponseBody
@ExceptionHandler(HttpMessageNotReadableException.class)
public ResponseData<Object> handleException(HttpMessageNotReadableException e) {
log.error("", e);
return new ResponseData<>(-1, "请求体不能为空");
}
@ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseData<Object> handleException(MethodArgumentNotValidException e) {
String err = e.getBindingResult().getFieldError() != null ? e.getBindingResult().getFieldError().getDefaultMessage() : e.getMessage();
log.error("", e);
return new ResponseData<>(-1, err, "");
}
}
网友评论