gpt4 book ai didi

java - @GET 可以为 JAX-RS 实现定义 Consumes Content-Type 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:28:41 25 4
gpt4 key购买 nike

我一直在 JAXRS 上尝试一些样本(本例使用 Jersey)。以下是我的示例 stub 实现:

    @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:已检测到资源和/或提供程序类的以下错误和警告:
严重:产生媒体类型冲突。资源方法 public java.lang.String StubImpl.getString(int,int) 和 public java.lang.String StubImpl.getSize(int,javax.ws.rs.core.HttpHeaders) 可以产生相同的媒体类型

据我所知,@GET 请求永远不需要 @Consumes(MediaType.APPLICATION_JSON),因为它用于正文中的内容类型(并且 GET 方法没有正文)。

现有行为是否符合预期?

提前致谢

最佳答案

根本不是 JAX-RS 专家,所以这只是一个猜测。

如果不设置 @Consumes(MediaType.APPLICATION_JSON),Jersey 如何决定在收到 GET 请求时调用哪个方法?

两种方法都响应 GET 请求,在同一路径上,接受任何媒体类型,并产生相同的媒体类型。所以我的猜测是,当 GET 请求进入此路径时,Jersey 无法决定(随机除外)调用哪个方法,因此拒绝启动。

@Consumes 注释使其在请求具有 JSON 正文(即从不)时调用 getSize,而在所有其他情况下(即始终)调用其他方法。

关于java - @GET 可以为 JAX-RS 实现定义 Consumes Content-Type 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16505197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com