Chr*_*ris 3 java rest get jax-rs jersey
我一直在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");
}
}
Run Code Online (Sandbox Code Playgroud)
如果没有在其定义中getSize具有的方法@Consumes(MediaType.APPLICATION_JSON),则该类在初始化期间具有错误.但是有了它,StubImpl类会正确初始化并根据传入的请求是否具有Content-Typeas 来处理请求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方法没有正文).
现有行为是否有望?
提前致谢
根本不是JAX-RS专家,所以这只是猜测.
如果你没有设置,泽西岛怎么决定在GET请求进来时调用哪个方法@Consumes(MediaType.APPLICATION_JSON)?
两种方法都响应GET请求,在同一路径上接受任何媒体类型,并生成相同的媒体类型.所以我的猜测是,当GET请求进入此路径时,Jersey无法决定(除了随机)调用哪个方法,因此拒绝启动.
该@Consumes注解使得它调用的getSize当请求有一个JSON体(即从来没有),并在所有其他情况下,其他的方法(即总是).
| 归档时间: |
|
| 查看次数: |
5341 次 |
| 最近记录: |