【问题标题】:Hibernate validator @NotEmpty not working spring boot and jackson休眠验证器@NotEmpty 无法正常工作弹簧启动和杰克逊
【发布时间】:2016-07-02 20:52:18
【问题描述】:

我有以下类,它有带有 @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) {

我的类路径中有所需的休眠验证器类。

当我输入以下 JSON 时:

{
"errorss": [ 
  ]
}

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

 {
    "errors": [ 
      ]
    }

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

【问题讨论】:

  • 用@NotBlank 也试过了,但也不起作用

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


【解决方案1】:

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

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

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

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

@NotEmpty
private List<@Valid Foo> foo;

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

【讨论】:

    【解决方案2】:

    检查您是否已在 pom.xml 中包含此依赖项

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 2021-02-07
      • 2019-04-16
      • 2016-11-10
      • 2017-08-18
      • 2021-05-28
      • 1970-01-01
      相关资源
      最近更新 更多