我可以在Rest Api中为两个班级使用相同的路径吗?

Far*_*iba 4 java rest web-services jax-rs

是否可以为两个类定义相同的路径?

@Path("/resource")    
public class ResourceA{
..
..
}

@Path("/resource")
public class ResourceB(){
..
..
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*tha 9

可能的.请参阅JAX-RS规范3.7.2请求匹配.在外行人的术语中,规范声明所有匹配的根资源类都被放入一个集合中,然后将这些类中的所有匹配方法放入一个集合中.然后排序.因此,如果资源类级别@Path相同,则它们都将被放入集合中以进行进一步处理

您可以轻松地对此进行测试,如下所示(使用Jersey测试框架)

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);
    }
}
Run Code Online (Sandbox Code Playgroud)