【发布时间】:2021-03-11 14:01:43
【问题描述】:
我有一个像这样的处理程序和一个自定义注释@ValidRequest:
@Introspected
public class MessageHandler extends MicronautRequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
@Override
public APIGatewayProxyResponseEvent execute(@ValidRequest APIGatewayProxyRequestEvent event) {
return new APIGatewayProxyResponseEvent()
.withStatusCode(200)
.withHeaders(Collections.singletonMap("Content-Type", "application/json"))
.withBody("OK");
}
}
注解本身如下所示:
@Retention(RUNTIME)
@Constraint(validatedBy = {ValidRequestValidator.class})
public @interface ValidRequest {
String message() default "Request is not valid";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
而验证器是这样的:
@Introspected
public class ValidRequestValidator implements ConstraintValidator<ValidRequest, APIGatewayProxyRequestEvent> {
@Override
public boolean isValid(
@Nullable APIGatewayProxyRequestEvent event,
@NonNull AnnotationValue<ValidRequest> annotationMetadata,
@NonNull ConstraintValidatorContext context
) {
if (event == null || event.getBody() == null || event.getBody().isEmpty()) {
throw new RuntimeException("Incorrect request event");
}
return true;
}
}
问题是验证被完全忽略了。我可以发送任何带有或不带有正文的事件,并且一切正常。我按照 Micronout 文档做了所有事情,可能有什么问题?
https://docs.micronaut.io/latest/guide/index.html#beanValidation
【问题讨论】:
-
你能去掉 throw new RuntimeException 并改为返回 false 并尝试
-
@SusanMustafa 同样的行为,我需要在我的逻辑中抛出异常
标签: java validation lambda bean-validation micronaut