我想检查一下我们是否“关闭”了一个特定的端点。目前它是通过 ContainerRequestFilter 实现的。但是由于我不能直接挂接到控制器/资源级别的过滤器(据我所知),所以我能做的最好的事情就是从过滤器中抛出一个异常,然后返回给客户端,我宁愿客户端查看格式化的 json 错误响应而不是堆栈跟踪。
我实现了以下约束接口和类:
@NotNull
@Target({METHOD, FIELD, ANNOTATION_TYPE, PARAMETER})
@Retention(RUNTIME)
@Constraint(validatedBy = MethodNotImplementedImpl.class)
@Documented
public @interface MethodNotImplemented {
String message() default "{Default message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class MethodNotImplementedImpl implements ConstraintValidator<MethodNotImplemented, UriInfo> {
public void initialize(MethodNotImplemented constraintAnnotation) {logger.debug("init called");}
public boolean isValid(UriInfo uriInfo, ConstraintValidatorContext constraintContext) {
logger.debug("validate called");
return true;
}
}
我想让每个休息方法然后执行约束,但约束没有触发。
@Validated
@Path("/people")
public class PeopleController extends BaseController {
@GET
@Path("/{peopleId}")
@Produces(MediaType.APPLICATION_JSON)
public Response getPeople(@MethodNotImplemented @Context UriInfo uriInfo,
@PathParam("peopleId") String peopleId,
@DefaultValue("") @QueryParam("fields") String partialResponseFields) {
....
一切都可以正常编译和部署,但是在调用端点时不会调用 init 或 isValid 方法。我在我的应用程序中的 POJO 上设置了其他方法级别约束,并且在调用该方法时它们会自动触发。我正在尝试做的事情可能吗?如果是这样,我做错了什么?