泽西岛 - 使用Context确定“@Produces”?

时间:2013-12-30 19:27:58

标签: java http-headers jersey

我是Jersey的新手,想要在其他环境中确定@Produces类型,所以我可以在错误处理案例中使用它。

例如,我有以下生成json的方法:

@Path("test-json")
@Produces(MediaType.APPLICATION_JSON)
@GET
public Object getTestJson(@Context HttpServletRequest req, @Context HttpServletResponse res) throws Exception
{
        throw new RuntimeException("POST submitted without CSRF token! ");
}

稍后,在全局异常处理程序中,我想获得@Produces媒体类型。 我已尝试使用以下内容执行此操作,但getMediaType()返回null(请注意,这是简化的,但在我的所有测试中标头都不为空,只有getMediaType()为空)。

public class someClass
{
    @Context
    HttpHeaders headers;

    public Response convertExceptionToResponse(T exception)
    {
         MediaType mediaType = headers.getMediaType();

         // At this point, I thought media type would be 
         //    MediaType.APPLICATION_JSON 
         // for the above 'getTestJson' method, but it's null. 
    }
}

我该怎么做?

1 个答案:

答案 0 :(得分:2)

JAX-RS

注入ResourceInfo并调用将返回Java getResourceMethod()Method。然后,您可以简单地检索声明的注释。这里的问题是,使用这种方法,您需要进行大量编码,以防@Produces不直接位于方法上,而是位于层次结构中的某个位置。

泽西2

注入ExtendedUriInfo

@Context
private ExtendedUriInfo uriInfo;

并查找匹配的ResourceMethodgetMatchedResourceMethod())。然后只需获取可生成媒体类型的列表(getProducedTypes())。