java—尝试使用bean验证验证字段时不会发生任何事情

njthzxwz  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(568)

我试图对我的模型类应用验证,但它不起作用,它只是忽略并注册值​​在数据库中,即使它为null或空。
我用的是Lombok山
我的用户模型:
私有静态final long serialversionuid=1l;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;

@NotNull
@NotBlank

private String nome;  

@NotNull
@NotBlank
private BigDecimal incomeMonthly;

@Convert(converter = RiskEnumConverter.class)
private RiskEnum risk; 

@OneToOne(cascade = CascadeType.ALL)
private Address address;

我的地址模式:

@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    @NotBlank
    private Integer number; 

    @NotNull
    @NotBlank
    private String neighborhood;

    @NotNull
    @NotBlank
    private String postalCode; 

    @NotNull
    @NotBlank
    private String state;

    @NotNull
    @NotBlank
    private String city;

我的控制器:

@PostMapping
    public ResponseEntity<User> save(@Valid @RequestBody User user, HttpServletResponse response) {

        User saveUser = this.userService.save(cliente);
        publisher.publishEvent(new ResourceCreatedEvent(this, response, saveUser.getId()));
        return ResponseEntity.status(HttpStatus.CREATED).body(saveUser);
    }

pom相关性:

<dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
        </dependency>
hsvhsicv

hsvhsicv1#

从上面的代码来看,您似乎缺少一个异常处理程序来捕获验证失败。处理程序允许您指定如何在应用程序中处理验证失败。这篇来自baeldung网站的文章展示了如何设置异常处理程序。
在我的项目中,我通常会设置一个错误处理类,其中包含每种错误的方法,例如。

@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ResponseBody
        public ValidationFailureResponse validationError(MethodArgumentNotValidException ex) {
            BindingResult result = ex.getBindingResult();
            final List<FieldError> fieldErrors = result.getFieldErrors();

            return new ValidationFailureResponse((FieldError[])(fieldErrors.toArray(new FieldError[fieldErrors.size()])));
         }
    }
}

正如在评论中提到的,您将需要一个验证实现来完成这项工作。baeldung的文章中提到了以下mvn依赖关系:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-validation</artifactId> 
</dependency>
7y4bm7vi

7y4bm7vi2#

hibernate验证器是验证api的参考实现。
所以,您需要将其添加到pom.xml中

<dependency>
  <groupId>org.hibernate.validator</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>6.0.13.Final</version> 
</dependency>

你可以根据需要使用这个版本。
如果你想探索一下,看看这个参考资料。

相关问题