JAX-RS通配符注释

时间:2015-11-16 08:38:13

标签: java rest annotations

编辑:我的同事下面有一个未经过彻底测试的答案,但我仍然希望听到讨论和更好的答案。

我很乐意被指出答案,但我没有在搜索中找到答案。

Java REST可以使用类和方法的注释来实现,包括@Path注释以匹配URI。是否有注释或其他方法来匹配未与另一个注释明确匹配的任何内容。一个例子:

@Path("")
public class RestEntryPoint {

    @GET
    @Path("/{s:.*}")
    @Produces(MediaType.TEXT_PLAIN)
    public String anything(@Context UriInfo ui) {
        return "anything at all..." + ui.getPath();
    }

    @GET
    @Path("/restserver/heartbeat")
    @Produces(MediaType.TEXT_PLAIN)
    public String heartbeat() {
        return "Jetty RestServer heartbeat";
    }
}


http://localhost:8082/restserver/heartbeat/

...在浏览器中返回正确的文本(“Jetty RestServer heartbeat”)。但我希望任何其他URI都能使用方法anything(@Context UriInfo ui)中的消息进行响应 - 但我只收到404.

如果可以通过其他方式完成,请告诉我如何操作。如果可以这样做(但不同),请告诉我更改。

2 个答案:

答案 0 :(得分:1)

我认为你需要明确地将它映射到“/”,然后让方法听“。*”或“。+”:

@Path("/")
public class RestEntryPoint {

   @GET
   @Path("s:.*")
   @Produces(MediaType.TEXT_PLAIN)
   public String anything(@Context UriInfo ui) {
       return "anything at all..." + ui.getPath();
   }

   @GET
   @Path("restserver/heartbeat")
   @Produces(MediaType.TEXT_PLAIN)
   public String heartbeat() {
       return "Jetty RestServer heartbeat";
   }
}

这应该可以解决问题。

答案 1 :(得分:0)

只需在路径中添加斜杠即可。 像这样

@Path("/")
 public class RestEntryPoint {

@GET
@Produces(MediaType.TEXT_PLAIN)
public String anything(@Context UriInfo ui) {
    return "anything at all..." + ui.getPath();
}

@GET
@Path("/restserver/heartbeat")
@Produces(MediaType.TEXT_PLAIN)
public String heartbeat() {
    return "Jetty RestServer heartbeat";
}

}