使用target =参数的验证注释不会在target = type工作时触发

时间:2016-04-13 20:48:21

标签: java spring annotations

我试图在我正在写作的休息服务中进行声明式验证。我写了两个注释,一个针对TYPE,一个是有效的,另一个是针对PARAMETER的,它没有。我试图找出原因。

我们正在使用Spring Boot将所有内容连接在一起。鉴于目标TYPE有效,我假设问题不在于配置,而在于代码。我从休息控制器中的方法开始使用以下方法签名

@RequestMapping(
  value = "/{itemId}",
  method = RequestMethod.PUT,
  consumes = APPLICATION_JSON_VALUE,
  produces = APPLICATION_JSON_VALUE
  )
public ResponseEntity<Item> update(
  @PathVariable("basketId") @Valid @ValidateBasketIdParameter UUID basketId,
  @PathVariable("itemId") UUID itemId,
  @RequestBody @Valid ItemUpdateRequest request,
  HttpServletResponse response) {
...
}

您可以在方法签名上看到@ValidateBasketIdParameter注释,它是不起作用的注释。 ItemUpdateRequest参数上的@Valid查找我编写的注释并用以下内容修饰该类:

@UpdateItemValidator
public class ItemUpdateRequest { ... }

2个注释几乎完全相同。这是有效的:

@Target(TYPE)
@Retention(RUNTIME)
@Constraint(validatedBy = {UpdateItemValidator.Validator.class})
public @interface UpdateItemValidator {

  class Validator implements
      ConstraintValidator<UpdateItemValidator, ItemUpdateRequest> {

然后我覆盖isValid()并将其称为一天。 @ValidateBasketIdParameter注释定义的唯一区别是类名更改,@ Target成为PARAMETER。但是,当针对TYPE的类时,该类永远不会被触发。我缺少什么或不理解?

0 个答案:

没有答案