我是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.
}
}
我该怎么做?
答案 0 :(得分:2)
注入ResourceInfo并调用将返回Java getResourceMethod()的Method。然后,您可以简单地检索声明的注释。这里的问题是,使用这种方法,您需要进行大量编码,以防@Produces
不直接位于方法上,而是位于层次结构中的某个位置。
@Context
private ExtendedUriInfo uriInfo;
并查找匹配的ResourceMethod(getMatchedResourceMethod())。然后只需获取可生成媒体类型的列表(getProducedTypes())。