【问题标题】:jersey web services with multiple functions具有多种功能的泽西 Web 服务
【发布时间】:2014-07-13 16:07:28
【问题描述】:

我有一个球衣类文件,我可以毫无问题地正确查询

@Path("/hello")
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_HTML)
public class Hello {

@GET
public String sayPlainTextHello(@QueryParam("t") String t) {
  return "Hello Jersey " + t;
}
}

现在我如何查询这两个不同的函数 -

@Path("/hello")
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_HTML)
public class Hello {

@GET
public String sayPlainTextHello(@QueryParam("t") String t) {
  return "Hello Jersey " + t;
}

@GET
public String sayPlainTextHi(@QueryParam("p") String t,@QueryParam("s") String s) {
  return "Hello Jersey " + t + " " + s;
}    
}

保存此文件时,未部署 Web 应用程序并显示 -

SEVERE: Producing media type conflict. The resource methods 
public java.lang.String
newa.Hello.sayPlainTextHi(java.lang.String,java.lang.String)
and public java.lang.String newa.Hello.sayPlainTextHello(java.lang.String) 
can produce the same media type

当我将第二个函数生成类型更改为

@Produces(MediaType.APPLICATION_JSON)

并查询路径

http://localhost/nvoids/rest/hello?p=hi&s=cool

然后它也返回

Hello Jersey null

我怎样才能让两个函数以不同的参数运行,使用普通的生产者到 html 或不同的生产者,就像上面的例子一样。

问候

【问题讨论】:

    标签: jakarta-ee tomcat jersey jax-rs jersey-2.0


    【解决方案1】:

    QueryParam 不是定义注释的路径。通常,单个资源方法会因方法类型(例如 @GET vs @POST vs @PUT)或路径(通过使用唯一的 @PATH 标记方法)而有所不同。我认为您也可以通过指定接受标头来控制调用的方法,但不能保证。

    对于您的用例,我的建议是整合其余端点方法并使用委托方法来处理您的逻辑;在 if/else 块中。见这里:

    @Path("/hello")
    @Consumes(MediaType.TEXT_PLAIN)
    @Produces(MediaType.TEXT_HTML)
    public class HelloResource {
        @QueryParam("t")
        private String t;
    
        @QueryParam("p")
        private String p;
    
        @QueryParam("s")
        private String s;
    
        @GET
        public String sayPlainTextHello() {
            if (t != null) {
                return "Hello Jersey " + t;
            } else {
                return "Hello Jersey " + t + " " + s;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 2015-08-21
      相关资源
      最近更新 更多