业务场景
根据自定义注解,针对特殊接口进行验证,如重复请求验证,日志记录等
过滤器用法
@PreventRepeatRequest
@Provider
@Slf4j
public class RepeatRequestFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) {
log.info("请求过滤...{}", requestContext.getUriInfo().getRequestUri().toString());
// todo
}
}
注册到ResourceConfig
jerseyConfig.register(RepeatRequestFilter.class);
@PreventRepeatRequest
@POST
@Path("test")
public void test(){}
注解解释
@PreMatching、@Provider、@NameBinding
@PreMatching
上述代码片段如果使用@PreMatching代替@Provider,所有请求均会被日志记录,不管接口是否添加@PreventRepeatRequest自定义注解。主要原因:@PreMatching
会忽略自定义的@NameBinding注解,自定义注解使用无效。
@Provider、@NameBinding
将@NameBinding放在自定义注解上,和filter上的@Provider可实现,根据自定义注解进行记录日志或者针对特殊接口进行业务处理
也可搭配@Priority(Integer.MAX_VALUE)
进行优先级配置