相关疑难解决方法(0)

如何在Jersey ContainerResponseFilter中获取资源注释

Jersey提供两个类来与资源上的注释进行交互:

ResourceFilterFactory定义了一个create方法(实现),AbstractMethod该方法可以访问方法和类注释.

ContainerRequestFilter和ContainerResponseFilter定义了一个filter接受请求/响应的方法(实现),但这些方法只能访问被调用的方法注释,而不是第一类.

我正在尝试实现一个CacheControl注释,它以下列方式定义HTTP缓存头.

@Path("/path")
@CacheControl(maxAge = 172800)
public class Resource
{   
    @GET
    @Path("/{id}")
    @CacheControl(mustRevalidate = true)
    public Response get(@PathParam("id") Long id)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我不想为我的应用程序中定义的每个REST方法创建一个新的CacheControlFilter.

public class FilterFactory implements ResourceFilterFactory
{    
    @Override
    public List<ResourceFilter> create(AbstractMethod method)
    {
        List<ResourceFilter> filters = newArrayList();
        if (isAnnotationPresent(method, CacheControl.class))
            filters.add(new CacheControlFilter(method));
        return filters;
    }

    private boolean isAnnotationPresent(AbstractMethod method, Class<? extends Annotation> clazz)
    {
        return method.isAnnotationPresent(clazz) || method.getResource().isAnnotationPresent(clazz);
    }
} …
Run Code Online (Sandbox Code Playgroud)

java rest annotations http jersey

10
推荐指数
1
解决办法
6844
查看次数

如何在请求过滤器中获取表单参数

我正在尝试在请求过滤器中获取请求的表单参数:

@Override
public ContainerRequest filter(final ContainerRequest request) {

    final Form formParameters = request.getFormParameters();

    //logic

    return request;
}
Run Code Online (Sandbox Code Playgroud)

但是,表格似乎总是空的.该HttpRequestContext.getFormParameters()文件说:

获取请求实体的表单参数.

此方法将确保缓冲请求实体,以便应用程序可以使用它.

返回: 表单参数,如果有请求实体且内容类型为"application/x-www-form-urlencoded",否则将返回不包含参数的实例.

我的资源是注释的@Consumes("application/x-www-form-urlencoded"),虽然它在请求过滤器之后才会匹配 - 这就是为什么这不起作用?

我尝试做一些研究,但未能找到任何确凿的证据证明这是否可行.有这个为期4年的讨论,Paul Sandoz说:

如果您正在使用泽西过滤器或使用,HttpRequestContext您可以获得如下表单参数:[到Jersey 1.1.1的断开链接HttpRequestContext.getFormParameters]

我还发现了这个有关如何在请求过滤器中获取multipart/form-data表单字段的3年讨论.在其中,Paul Sandoz使用以下代码:

// Buffer
InputStream in = request.getEntityInputStream();
if (in.getClass() != ByteArrayInputStream.class) {
    // Buffer input
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {
        ReaderWriter.writeTo(in, baos);
    } catch (IOException ex) {
        throw new ContainerException(ex);
    }
    in = new …
Run Code Online (Sandbox Code Playgroud)

java jersey http-post http-request jersey-1.0

9
推荐指数
1
解决办法
2万
查看次数

从Jersey中的URI获取处理程序?

在内部ContainerResponseFilter我想得到"处理程序",即类@Path@GET/ @PUT-annotated方法匹配我将提供的URL.

例:

someJerseyVariable.getHandlerForURI(request.getRequestUri()); 
Run Code Online (Sandbox Code Playgroud)

我找不到任何类似的方法.

我想要这个的原因是,要统计每个处理程序服务的请求数以及成功/失败的数量.还欢迎任何其他替代方案.

java rest jersey

5
推荐指数
1
解决办法
2569
查看次数

标签 统计

java ×3

jersey ×3

rest ×2

annotations ×1

http ×1

http-post ×1

http-request ×1

jersey-1.0 ×1