BindingResult不起作用

时间:2018-05-31 06:03:42

标签: java spring spring-boot restful-architecture

我在Spring-Boot中设计了一个Restful控制器。它有一个持久化书籍对象的方法(使用post方法),除非你发送无效输入(例如,如果你向一个整数字段发送一个非整数值),它的工作方式是完美的。这里的问题是,相反,履行BindingResult对象会抛出HttpMessageNotReadableException异常。因此,我无法处理/处理绑定错误和进一步验证。

我需要的是我如何告诉spring在绑定请求对象时不抛出任何异常,所以我可以使用bindingResult.hasErrors()并以我自己的方式处理它。

注意:我不想处理Spring生成的对象。

这是我的代码:

@PostMapping
public ResponseEntity<Book> saveBook (
        @RequestBody Book book, BindingResult bindingResult, HttpServletRequest request ) {
    if ( bindingResult.hasErrors() == true )
        throw new RestArgumentValidationException( bindingResult, request.getRequestURI() );
    return new ResponseEntity<>( bookRepository.save( _book ), HttpStatus.CREATED );
}

1 个答案:

答案 0 :(得分:1)

首先,您必须在书籍对象中加入验证注释,如下所示:

public class Book {
  @Size(min = 5, max = 10)
  int height;
}

然后你应该将@Valid放在需要验证的对象中,让Spring知道。

@PostMapping
public ResponseEntity<Book> saveBook (
        @RequestBody @Valid Book book, BindingResult bindingResult, HttpServletRequest request ) {
    if ( bindingResult.hasErrors() == true )
        throw new RestArgumentValidationException( bindingResult, request.getRequestURI() );
    return new ResponseEntity<>( bookRepository.save( _book ), HttpStatus.CREATED );
}