Java 自定义注释不是';t验证方法参数

Java 自定义注释不是';t验证方法参数,java,spring-boot,validation,annotations,Java,Spring Boot,Validation,Annotations,我创建了一个自定义注释 @Documented @Constraint(validatedBy = CheckGranularityValidator.class) @Target( { ElementType.PARAMETER} ) @Retention(RetentionPolicy.RUNTIME) public @interface CheckGranularity { String message() default "Duration has to be a multipl

我创建了一个自定义注释

@Documented
@Constraint(validatedBy = CheckGranularityValidator.class)
@Target( { ElementType.PARAMETER} )
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckGranularity {
    String message() default "Duration has to be a multiple of granularity";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
资产成本请求的相关部分:

public class AssetCostsRequest {

    @JsonProperty
    @NotNull
    private TimeRange range;

    @JsonProperty
    @NotNull
    private Long granularity = 30L;

    ...getters & setters
}
测试方法返回200。当我尝试在
isValid
方法中设置断点时,在运行测试时它不会被命中。我试着改变注释的顺序,去掉
@Valid
,在
CheckGranularity
类中改变
@Target
,但没有任何帮助。我正在使用restasured进行测试


如何创建它,以便我的注释正确地验证参数?

CheckGranularity
的目标更改为
ElementType.TYPE
并直接在
assetcostrequest
上添加
@CheckGranularity
。同时从端点定义中删除
@CheckGranularity

它是如何工作的。通过在端点的参数上添加
@Valid
,您告诉spring验证它。添加像
@CheckGranularity
这样的验证不会在与
Valid
相同的级别上工作。它必须添加到parameters类中的某个位置

@RestController
public class CalcApiController extends CalcApi {

@Override
public ResponseEntity<String> calcProfitability(@Valid @CheckGranularity @RequestBody final AssetCostsRequest assetCostsRequest) {
    return ResponseEntity.ok("Works");
}
@Test
public void calcTest() {
    final AssetCostsRequest request = new AssetCostsRequest()
        .setRange(new TimeRange(100L, 200L))
        .setGranularity(26L);

    given()
        .contentType(ContentType.JSON)
        .body(request)
    .when()
        .post("/calc")
    .then()
        .statusCode(HttpStatus.SC_BAD_REQUEST);
}
public class AssetCostsRequest {

    @JsonProperty
    @NotNull
    private TimeRange range;

    @JsonProperty
    @NotNull
    private Long granularity = 30L;

    ...getters & setters
}