1

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

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

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

Accept这对于根据客户端发送的标头来仲裁调用哪个方法非常有效。

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

还有一个额外的复杂性,那就是它会自动输入到 Swagger 文档中,我不希望额外的 MIME 类型出现在文档中,所以我不希望(例如)添加*/*到第一个接受的类型方法。

(这是使用 Dropwizard 和 Jersey 1.x,尽管我仍然有兴趣听到基于 Jersey 2.x 的解决方案,我们可能很快就会升级到这些解决方案。)

4

1 回答 1

2

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

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

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

如果客户端没有在请求中发送“Accept:”标头,则 Web 服务器将执行getOtherThing(),因为它的质量因子高于getThing().

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

品质因数参数是RFC 2616 (14.1)
的一部分, 您可以在 RestEasy 中找到有关此功能的更多信息

于 2015-07-15T23:50:30.290 回答