我有这个基于Jersey2的应用程序,带有自定义ContainerRequestFilter
。
当调用filter(ContainerRequestContext)
方法时,我想进行检查,如果需要,我希望能够在进入应用程序的主逻辑之前停止请求。
目前,我使用ContainerRequestContext#abortWith
方法来阻止呼叫并返回错误"回应客户。
我的应用程序将JSONP
返回给客户端,如果我阻止abortWith
,则响应始终为JSON
。
看看我发现的球衣来源
负责org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor
序列化的JSONP
。
在abortWith
流程中,我发现它无法找到JSONP
注释,但我不知道它在哪里搜索。
我的方法有,实际上在"普通"方案(没有abortWith
)我正确地看到了JSONP
格式。
答案 0 :(得分:0)
我找到了解决方案。
ContainerRequestFilter#filter
方法类似于
public void filter(final ContainerRequestContext crc) throws IOException {
if (/* logic */) {
CustomObject ret = new CustomObject();
ret.error = "error message";
crc.abortWith(Response.ok(ret)).build());
}
}
JsonWithPaddingInterceptor
期望带有JSONP
注释的回复,以便我从ResourceInfo#resourceMethod
检索它们,例如
public void filter(final ContainerRequestContext crc) throws IOException {
if (/* logic */) {
Annotation[] as = this.resourceInfo.getResourceMethod().getAnnotations();
CustomObject ret = new CustomObject();
ret.error = "error message";
crc.abortWith(Response.ok().entity(ret, as).build());
}
}
这样就可以正确找到注释