我可以在 Rest Api 中为两个 类 使用相同的路径吗?
Can i have the same path for two classes in Rest Api?
是否可以为两个 类 定义相同的路径?
@Path("/resource")
public class ResourceA{
..
..
}
@Path("/resource")
public class ResourceB(){
..
..
}
不可能,你有那个和方法分开。
示例:
@Path("/resource")
public class Resource{
@Path("/A")
public void resourceA(){
...
}
@Path("/B")
public void resourceB(){
...
}
..
}
您可以使用 url“/resource/A”访问资源 A,使用“/resource/B”访问资源 B。
希望对您有所帮助。
是可能的。参见JAX-RS Spec 3.7.2 Request Matching。通俗地说,规范指出所有匹配的根资源 classes 被放入一个集合中,然后来自这些 classes 的所有匹配方法被放入一个集合中。然后排序。所以如果资源class层级@Path
相同,都会被放入集合中进一步处理
您可以轻松地对此进行测试,正如我在下面所做的那样(使用 Jersey Test Framework)
public class SamePathTest extends JerseyTest {
@Test
public void testSamePaths() {
String xml = target("resource").request()
.accept("application/xml").get(String.class);
assertEquals("XML", xml);
String json = target("resource").request()
.accept("application/json").get(String.class);
assertEquals("JSON", json);
}
@Path("resource")
public static class XmlResource {
@GET @Produces(MediaType.APPLICATION_XML)
public String getXml() { return "XML"; }
}
@Path("resource")
public static class JsonResource {
@GET @Produces(MediaType.APPLICATION_JSON)
public String getJson() { return "JSON"; }
}
@Override
public Application configure() {
return new ResourceConfig(XmlResource.class, JsonResource.class);
}
}
是否可以为两个 类 定义相同的路径?
@Path("/resource")
public class ResourceA{
..
..
}
@Path("/resource")
public class ResourceB(){
..
..
}
不可能,你有那个和方法分开。
示例:
@Path("/resource")
public class Resource{
@Path("/A")
public void resourceA(){
...
}
@Path("/B")
public void resourceB(){
...
}
..
}
您可以使用 url“/resource/A”访问资源 A,使用“/resource/B”访问资源 B。
希望对您有所帮助。
是可能的。参见JAX-RS Spec 3.7.2 Request Matching。通俗地说,规范指出所有匹配的根资源 classes 被放入一个集合中,然后来自这些 classes 的所有匹配方法被放入一个集合中。然后排序。所以如果资源class层级@Path
相同,都会被放入集合中进一步处理
您可以轻松地对此进行测试,正如我在下面所做的那样(使用 Jersey Test Framework)
public class SamePathTest extends JerseyTest {
@Test
public void testSamePaths() {
String xml = target("resource").request()
.accept("application/xml").get(String.class);
assertEquals("XML", xml);
String json = target("resource").request()
.accept("application/json").get(String.class);
assertEquals("JSON", json);
}
@Path("resource")
public static class XmlResource {
@GET @Produces(MediaType.APPLICATION_XML)
public String getXml() { return "XML"; }
}
@Path("resource")
public static class JsonResource {
@GET @Produces(MediaType.APPLICATION_JSON)
public String getJson() { return "JSON"; }
}
@Override
public Application configure() {
return new ResourceConfig(XmlResource.class, JsonResource.class);
}
}