加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:10:10 所属栏目:Java 来源:网络整理
导读:我一直在JAXRS上尝试一些示例(本例中使用Jersey).以下是我的示例存根实现: @Path("stubservice")public class StubImpl @GET @Produces(MediaType.APPLICATION_JSON) public String getString(@QueryParam("first") int first,@QueryParam("second") int se
我一直在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");
    }
}

如果没有在其定义中具有@Consumes(MediaType.APPLICATION_JSON)的getSize方法,则此类在初始化期间出错.但有了它,StubImpl类正确初始化并根据传入的请求是否将其Content-Type作为application / json来处理请求.

初始化过程中发生错误:

严重:已使用资源和/或提供程序类检测到以下错误和警告:
??严重:产生媒体类型冲突.资源方法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,而在所有其他情况下(即始终)调用另一种方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读