【发布时间】:2013-05-12 07:39:31
【问题描述】:
我一直在尝试一些关于 JAXRS 的示例(本示例使用 Jersey)。以下是我拥有的示例存根实现:
@Path("stubservice")
public class StubImpl
@GET
@Produces(MediaType.APPLICATION_JSON)
public String getString(@QueryParam("first")
int first, @QueryParam("second")
int second)
{
return "first: " + first + " second: " + second;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String getSize(@QueryParam("size")
int size,
@Context
HttpHeaders headers)
{
Gson gson = new Gson();
return gson.toJson("something else");
}
}
如果getSize 方法的定义中没有@Consumes(MediaType.APPLICATION_JSON),则此类在初始化期间会出错。但是有了它,StubImpl 类会正确初始化并根据传入请求的Content-Type 是否为application/json 来处理请求。
初始化时出错:
SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: Producing media type conflict. The resource methods public java.lang.String StubImpl.getString(int,int) and public java.lang.String StubImpl.getSize(int,javax.ws.rs.core.HttpHeaders) can produce the same media type
据我了解,@GET 请求永远不需要 @Consumes(MediaType.APPLICATION_JSON),因为它是用于正文中的内容类型(而 GET 方法没有正文)。
是预期的现有行为吗?
提前致谢
【问题讨论】:
-
奇怪...你得到什么样的错误?是不是可能和
HttpHeaders标注@Context注解的参数有关? -
@AlexR 感谢您的回复。更新错误信息
-
有人注意到这个问题吗?
-
它要么是球衣错误,要么是 jax-rs 规范错误。一世。 e.即使使用
@Consumes,它也应该给出相同的错误,但事实并非如此。在球衣 jira 上报告 - 他们反应迅速。 -
@randomstring 我正在寻找你预测的答案(认为泽西岛的提交者可能会回应)。还是谢谢你
标签: java rest get jersey jax-rs