泽西岛的@path和@queryparam

时间:2013-04-09 07:49:10

标签: java web-services rest jersey

我正在开发一个简单的restful webservice并且是一个新手。因此,我参考了基本教程并成功执行了它们。

以下是我为进一步着手而编写的示例代码

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

@Path("/text/{sso}")

public class Do {


      @GET
      @Produces(MediaType.TEXT_PLAIN)
      public String simple(@PathParam("ss") @QueryParam("d") String params) {
        return "Hello Jersey"+params;
      }

      @GET
      @Produces(MediaType.TEXT_PLAIN)
      public String advanced(@PathParam("as") @QueryParam("d") String params) {
        return "Hello Jersey-----"+params;
      }
}

我基本上需要的是在同一个类中公开两个不同的方法,并根据url访问相应的方法。

执行上述操作时会抛出以下错误 - com.sun.jersey.spi.inject.Errors $ ErrorMessagesException 如果我走在正确的轨道上,有人可以指导我吗?如果是,请告诉我我错过了哪里。如果不是这种情景的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

您的代码中存在两个问题。

  1. @PathParam注释需要应用于方法的参数
  2. @PathParam注释的值需要与路径段匹配。
  3. 您班级中唯一的路径段由此定义:

    @Path("/text/{sso}")
    

    并且值为'sso'。因此,您的代码看起来应该更像这样:

    @Path("/text/{sso}")
    public class Do {
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String simple(@PathParam("sso") String sso,
                @QueryParam("d") String params) {
            return "Hello Jersey" + params;
        }
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String advanced(@PathParam("sso") String sso,
                @QueryParam("d") String params) {
            return "Hello Jersey-----" + params;
        }
    }
    

答案 1 :(得分:0)

如果要匹配两个QueryParam,您的方法必须包含两个参数。

public String simple(@PathParam("ss") String paramSs,
                     @PathParam("d") String paramD) {
  // ...
}

@PathParam一个方法参数的注释。