2015-04-24 38 views
0

假设我有两个端点看起来像这样的:基于Accept头进行Jersey端点仲裁:什么时候没有给出Accept头?

@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和泽西1.x中,虽然我听到基于新泽西2.x的解决方案仍然感兴趣,这是我们可能很久以前升级。)

+0

您_might_能够过滤请求和修改'Accept'头泽西查询之前。我认为它不适用于'ContainerRequestFilter',但它可能与'ServletFilter'一起使用。 – condit

回答

0

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

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

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

如果客户端不发送“接受:”在请求头,Web服务器将执行getOtherThing(),因为它具有比getThing()更高质量的因素。

免责声明:这与RestEasy,但我不能保证它将与泽西工作。

品质因数参数是RFC 2616 (14.1)
部分你可以找到有关该功能的详细信息在RestEasy的here

相关问题