根据Accept标头仲裁Jersey端点:什么时候没有给出Accept标头?

时间:2015-04-24 11:07:15

标签: java annotations jersey dropwizard http-accept-header

假设我有两个端点,如下所示:

@GET
@Path("/blah")
@Produces(MIME_TYPE_1)
public Thing getThing() {
    ....
}

@GET
@Path("/blah")
@Produces(MIME_TYPE_2)
public OtherThing getOtherThing() {
    ....
}

这非常适合仲裁根据客户端发送的Accept标头调用哪个方法。

我遇到的问题是,如果客户端完全错过Accept标头,我(由于某种原因)会调用第二个方法,我希望它是第一个。< / p>

还有一个额外的复杂功能,就是这会自动输入到Swagger文档中,我不希望在文档中出现额外的MIME类型,所以我不想要(因为instance)将*/*添加到第一种方法接受的类型中。

(这是使用Dropwizard和Jersey 1.x,虽然我仍然有兴趣听听基于Jersey 2.x的解决方案,我们可能会不久升级。)

1 个答案:

答案 0 :(得分:1)

尝试使用@Produces注释中的品质因数参数:

@GET
@Path("/blah")
@Produces("application/json; q=0.6")
public Thing getThing() {
....
}

@GET
@Path("/blah")
@Produces("application/xml; q=1")
public OtherThing getOtherThing() {
....
}

如果客户未发送&#39;接受:&#39;请求中的标头,Web服务器将执行getOtherThing(),因为它的质量因子高于getThing()

免责声明:这适用于RestEasy,但我不能保证它适用于Jersey。

品质因数参数是RFC 2616 (14.1)的一部分 您可以在RestEasy here

中找到有关此功能的更多信息