我们可以有一个空的基本路径吗?

时间:2016-07-08 00:24:43

标签: java rest jersey jax-rs

@Path注释可以有一个空的基本路径吗? 即。 @Path(“/”)

我想提供REST api http://servername/abc

@Path("")
public class YourResource {

  @Path("/abc")
  @GET
  public Responce method1(){
    return Response.ok("ok").build();
  }

}

当我这样做时,抛出异常

javax.ws.rs.WebApplicationException     在com.sun.jersey.server.impl.uri.rules.TerminatingRule.accept(TerminatingRule.java:66)     在com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)     在com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)

UPDATE - 我在我的GuiceServletContextListener中绑定,如下所示

  

绑定(YourResource.class)。在(Singleton.class);

     

服务( “/ ABC”)与(GuiceContainer.class);

2 个答案:

答案 0 :(得分:0)

从类

中完全删除@Path("/")注释

前缀斜杠( / )到方法级别路径注释中,例如@Path("/abc")

请验证您的URI是否映射到java方法,如下所示。

启动服务器时,您可以看到URI如何映射到java方法,如 eclipse控制台 ...

Mapped "{[/static/transit],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.util.List<com.xxx.yyy.zzz.domain.Transit> com.xx.yy.zz.controller.abcDataController.getAllTransit()

=============================================== ===================

<强>更新

根据下面的java文档,这两个例子之间存在没有区别,两者都有效。 您可以使用两个 URI的使用前导斜杠,或者不要使用两个 URI的任何前导斜杠是相同。

  

路径是相对的。对于带注释的类,基URI是   应用程序路径,请参阅ApplicationPath。对于带注释的方法   base URI是包含类的有效URI。为了   用于对基URI进行绝对路径的目的,一个前导'/'   在路径中被忽略,基本URI被视为它们的结束   “/'.

@Path("message")

public class MessageServices {

    @PUT
    @Path("sendsms")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces({MediaType.APPLICATION_JSON})
    public Response sendSms() {
        //....
    }

}

@Path("/message")
public class MessageServices {

    @PUT
    @Path("/sendsms")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces({MediaType.APPLICATION_JSON})
    public Response sendSms() {
        //....
    }

}

答案 1 :(得分:0)

在路径(“ /”)中添加斜线,如下所示:

@Path("/")
public class YourResource {
  ...
}