在JAX-RS中指定@Produces通配符处理

时间:2012-12-13 16:01:25

标签: java servlets jax-rs

假设一个班级:

public class MyResource {

    @Path("/thing")
    public String getThing() {
        // returns HTML
    }

    @Path("/thing")
    @Produces(MediaType.APPLICATION_JSON)
    public String getThingJSON() {
        // returns JSON
    }
}

Accept: */*如何处理标题为getThing()的请求?目前,拥有通配符接受标头会导致getThingJSON()被调用。如果我有Accept: text/html的接受标头,则会调用getThing()

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我需要使用特定@Produces()注释的方法。这个技巧有效:

@Path("/thing")
public String getThing() {}

@Path("/thing")
@Produces({MediaType.APPLICATION_JSON, "*/*;q=0"})
public String getThingJSON() {}

使用MIME类型时,可以添加q属性,表示优先级(0到1)。没有q属性意味着1,但显然q = 0欺骗泽西岛使用其他功能。

这是一种黑客行为,所以我不知道它是否会继续有效,但帮助了我。

答案 1 :(得分:-1)

尝试添加a @Produces({MediaType.WILDCARD})

到getThing()