Hibernate验证器@NotEmpty不能正常工作spring boot和jackson

时间:2016-07-02 20:52:18

标签: spring-mvc jackson hibernate-validator spring-restcontroller

我有以下类,其中包含带有@NotEmpty注释的errorRequests。

public class ErrorsRequests implements Serializable {


  private static final long serialVersionUID = -727308651190295062L;

  private String applicationName;

  @NotEmpty
  @Valid
  @JsonProperty("errors")
  private List<ErrorsRequest> errorRequests;

我的控制器如下所示:

 @Autowired
  @Qualifier("errorStreamValidator")
  private Validator errorStreamValidator;

  @RequestMapping(method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE,
      consumes = MediaType.APPLICATION_JSON_VALUE)
  public ResponseEntity<Void> errorReporting(@NotNull @PathVariable String applicationName,
      @Valid @NotNull @RequestBody ErrorsRequests errorsRequests, BindingResult results) {

我在类路径中有所需的hibernate验证器类。

当我输入以下JSON时:

{
"errorss": [ 
  ]
}

@NotEmpty验证根本没有启动。 Hibernate验证仅在json中包含errors元素时才有效,如下所示

 {
    "errors": [ 
      ]
    }

我可以让第一个案例也有效吗?

2 个答案:

答案 0 :(得分:1)

您使用注释的方式错误,并且您的控制器也缺少注释。

您应该使用@Validated注释您的控制器:

@Validated
@RestController
@RequestMapping("/mycontroller")
public class MyController { ... }

在模型类中,您需要像这样放置注释:

@NotEmpty
private List<@Valid Foo> foo;

@Valid批注将检查列表中的项目是否也有效。

答案 1 :(得分:0)

检查你是否在 pom.xml 中包含了这个依赖

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