java - BindingResult 不起作用

标签 java spring spring-boot restful-architecture

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

我需要的是如何告诉 spring 在将请求绑定(bind)到对象时不抛出任何异常,这样我就可以使用 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 );
}

最佳答案

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

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 );
}

关于java - BindingResult 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50617650/

相关文章:

java - 使用 @PostConstruct 时 Hibernate 无法找到绑定(bind)到线程的 session

java - Spring Boot或Spring中用于异常和错误处理场景的工作流机制

java - Spring MVC :- How do i get the uploaded image to display on jsp page as soon as the user selects the image. 我在这里使用Spring框架

java - 很棒的字体+应用程序引擎不工作

java - 如何使用Spring Security在login.jsp页面显示登录错误消息?

java - 是否可以将对象类型信息传递给泛型方法

java - 双向一对多 JPA org.hibernate.exception.ConstraintViolationException

java - HikariCp 连接池在调用 oracle 数据库中的存储过程后无法重用 session

java - SpringBoot loader.path 无法加载外部Jar

java - 面临SpringBoot Security模块登录错误