【问题标题】:BindingResult does not workBindingResult 不起作用
【发布时间】:2018-05-31 06:03:42
【问题描述】:

我在 Spring-Boot 中设计了一个 Restful 控制器。它有一种持久化书籍对象的方法(使用 post 方法),除非您发送无效输入(例如,如果您将非整数值发送到整数字段),否则该方法可以完美运行。这里的问题是,代替实现 BindingResult 对象 spring 会抛出 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 );
}

【问题讨论】:

    标签: java spring spring-boot restful-architecture


    【解决方案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 );
    }
    

    【讨论】:

    • 我已经做了你提到的,但它仍然抛出异常。
    猜你喜欢
    • 2014-06-16
    • 2015-01-15
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2018-03-26
    相关资源
    最近更新 更多