关于REST中http方法重载的建议

wil*_*ood 2 java rest overloading jax-rs

我在@Path中使用了正则表达式来实现重载,起初我认为它非常简洁,但是重载方法通常不是很好的做法.这同样适用于RESTful Web服务吗?有没有更好的方法来实现这个使用JAX-RS?

所以我现在可以通过/ project/ProjectNumber1000或/ project/12345调用我的getProject REST服务

@Path("/project")
public class ProjectPropertiesResource
{
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/{name : [a-zA-Z]+}")
    public Response getProjectPropertiesByName(@PathParam("name") String name)
    {
         ...
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/{id : \\d+}")
    public Response getProjectPropertiesById(@PathParam("id") long id)
    {
         ...
    }
}
Run Code Online (Sandbox Code Playgroud)

Dar*_*ler 6

你可以这样做,但是,只有一个重载实际上应该返回带有200的响应体.其他重载应该返回303重定向到返回主体的URI.

这将确保缓存只有一个资源副本,如果在主URI上执行PUT或POST,则会使一个副本无效.否则,由于缓存中存在不同的版本,您可能会开始获得不一致的结果.