Java 如何在Jersey 1.x中为传入请求在服务器端设置Accept标头

Java 如何在Jersey 1.x中为传入请求在服务器端设置Accept标头,java,jersey,Java,Jersey,我想知道是否有办法在服务器端为传入请求设置“接受”头 在Jersey 2.x中,通过实现和注册@Prematch ContainerRequestFilter可以做到这一点,但我还没有找到在Jersey 1.x版本中实现这一点的方法 其思想是在资源方法上设置一个“@products”注释可以理解的“Accept”头。我正在尝试处理一个客户端无法设置“Accept”头的用例。因此,他将期望的响应类型指定为查询参数,如“type=json”。其思想是最好在过滤器中读取提供的类型查询参数,并在调用带有

我想知道是否有办法在服务器端为传入请求设置“接受”头

在Jersey 2.x中,通过实现和注册@Prematch ContainerRequestFilter可以做到这一点,但我还没有找到在Jersey 1.x版本中实现这一点的方法

其思想是在资源方法上设置一个“@products”注释可以理解的“Accept”头。我正在尝试处理一个客户端无法设置“Accept”头的用例。因此,他将期望的响应类型指定为查询参数,如“type=json”。其思想是最好在过滤器中读取提供的类型查询参数,并在调用带有'@products'注释的资源方法之前更新“Accept”头

请让我知道是否有办法实现这一点


致以最诚挚的问候,

我认为实现这一点的首选方法是使用url扩展

http://example.org/resource.xml
将返回XML

http://example.org/resource.json
将返回JSON

这可以通过定制的
PackageResourceConfig
来实现,告诉Jersey如何将扩展映射到媒体类型:

public类示例ResourceConfig扩展了PackageResourceConfig{
公共示例ResourceConfig(地图道具){
超级(道具);
}
公共示例ResourceConfig(字符串…包){
超级(套装);
}
@凌驾
公共映射getMediaTypeMappings(){
Map Map=newHashMap();
map.put(“xml”,MediaType.APPLICATION\uxml\utype);
map.put(“json”,MediaType.APPLICATION\u json\u TYPE);
返回图;
}
}

如果您使用
web.xml
来配置Jersey,您可以将
javax.ws.rs.Application
属性设置为您的
PackageResourceConfig
类名。

您是否查看了@Consumes?Consumes注释告诉您正在接收的实体类型(服务器端),如Json或xml,它是使用内容类型设置的,不接受。。products注释告诉您将要发送回客户机的内容,您需要一个accept头。。为什么要将其作为查询参数\嗨,LMG,对不起,你是对的,我刚刚有一个金发的时刻。该调用将通过web上的标记进行。图像标记不允许您设置接受标头(这是一种例外情况)。在这种情况下,您可能希望取回一个图像,而不是JSON或XML,因此服务器必须被告知可接受的媒体类型是“image/gif”,比如说,而不是“application/JSON”。嗨,LMG,我将删除我之前的混淆注释,这样我们就不会混淆太多(请=)。我已经更新了问题的描述。非常感谢你的帮助。嗨,康迪特,谢谢你的回复。这是一个很好的替代方案,但是我需要更改MyAPI以使用URL扩展(当然这是可能的)。我使用的是编程配置,而不是web.xml,但是用它来实现上述功能没有问题。怎么样:,javax.ws.rs.core.MediaType)?你是说用不同的MediaType设置响应吗?当然-但基于查询参数。实际上,这就是我最终要做的:我创建了ContentResponseFilter的一个实现,在其中检查查询参数“type”。如果存在,我将使用以下命令创建一个新响应:
Response.fromResponse(containerResponse.getResponse()).type(MediaType.APPLICATION_JSON).build()这可以确保输出的类型正确。