@Valid或同时使用@Valid和BindingResult-哪一个去了,为什么?

时间:2019-07-19 06:49:08

标签: spring-boot spring-mvc

我通过了What is the use of BindingResult interface in spring MVC?https://www.petrikainulainen.net/programming/spring-framework/spring-from-the-trenches-adding-validation-to-a-rest-api/链接。

我在这里发现了两种情况:

情况1::在一个控制器中使用@Valid注释,但不将BindingResult bindingResultif (bindingResult.hasErrors())方法一起使用

@RequestMapping(value = "/api/comment", method = RequestMethod.POST)
@ResponseBody
public CommentDTO add(@Valid @RequestBody CommentDTO comment) {
    ........
    ........
    ......
    return comment;
}

带有@ControllerAdvice

的异常类
@ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ResponseBody
    public ValidationErrorDTO processValidationError(MethodArgumentNotValidException ex) {
        BindingResult result = ex.getBindingResult();
        List<FieldError> fieldErrors = result.getFieldErrors();

        return processFieldErrors(fieldErrors);
    }

情况2: 同时使用@Valid@BindingResult

@PatchMapping
public ResponseEntity<HttpStatus> updateEmployee(@Valid @RequestBody EmployeeDto dto, BindingResult br){
    if (br.hasErrors()) {
        throw new InvalidRequestException("Invalid resource", br);
    }

    employeeService.updateEmployee(dto);
    return new ResponseEntity<>(HttpStatus.OK);
}

现在,为了显示所有字段都有验证问题的详细信息并设置/获取一些错误消息等,最好从BindingResult变量中获取。

0 个答案:

没有答案