Validation进行参数校验

Validation进行参数校验


各位同袍们,你们好呀!!!我是一个才入java开发者行的萌新,今天研究了一下 Validation的一个校验框架,为了怕自己遗忘掉,所以在此记录一下,同时也希望能帮到各位同袍们!!!!!!好了,不多说,开始记录!!

首先需要导入一个它的依赖框架

它对ben进行校验
Validation进行参数校验_第1张图片
@NotBlank 就是它的验证注解 message 就是它的错误提示消息,可以自定义

它的注解有如下:
Validation进行参数校验_第2张图片
自定义错误处理

Spring Boot的Controller方法中可以传一个BindingResult或者Errors类型的参数

@RestController
public class BookController {
    @PostMapping("/book")
    public Book getBook(@Valid Book book, BindingResult result, HttpServletResponse response) {
        if (result.hasErrors()) {
            result.getAllErrors().forEach((error) -> {
                FieldError fieldError = (FieldError) error;
                // 属性
                String field = fieldError.getField();
                // 错误信息
                String message = fieldError.getDefaultMessage();
                System.out.println(field + ":" + message);
            });

        }
        // ...
        return book;
    }
}

Spring Boot的异常处理+Bean Validation

Spring Boot 中有一个专门处理错误信息的一个类叫做ResponseEntityExceptionHandler。其中有很多关于400的错误处理,也就是参数错误的处理,其中就有一个专门用来处理没有通过校验的参数的方法。我们重写这个类的这个方法即可。

@ControllerAdvice   // Spring 的异常处理的注解
public class BadRequestExceptionHandler extends ResponseEntityExceptionHandler {

    private Logger logger = LoggerFactory.getLogger(getClass());


    @Override
    protected ResponseEntity handleBindException(BindException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {

        Map messages = new HashMap<>();
        BindingResult result = ex.getBindingResult();
        if (result.hasErrors()) {
            List errors = result.getAllErrors();
            for (ObjectError error : errors) {
                FieldError fieldError = (FieldError) error;
                messages.put(fieldError.getField(), fieldError.getDefaultMessage());
            }
            logger.error(messages.toString());
        }
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(messages);
    }
}
 
  

到此结束,希望能帮助你们,同时也对自己加深印象

你可能感兴趣的:(参数校验)