2010-08-23 3 views
2

Я использовал регулярное выражение в @Path для достижения перегрузки, и сначала я думал, что это действительно опрятно, но методы перегрузки обычно не являются хорошей практикой. То же самое относится к веб-службам RESTful? Есть ли лучший способ добиться этого с помощью JAX-RS?Рекомендации по перегрузке http-методов в REST

Так теперь я могу назвать мою службу getProject привала/проект/ProjectNumber1000 или/проектом/12345

@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) 
    { 
     ... 
    } 
} 
+1

Возможно, это только я, но я не вижу перегрузки в вашем примере. Оба метода имеют разные имена. –

+1

Я перегрузил путь для доступа к этим методам. Сами методы имеют другое название, поскольку я обычно не использую перегрузку. – willcodejavaforfood

ответ

6

Вы можете сделать это, однако, только один из перегруженных должен фактически вернуть тело ответа с 200 . Другие перегрузки должны возвращать перенаправление 303 в URI, который возвращает тело.

Это гарантирует, что в кешах будет только одна копия ресурса, и если вы используете PUT или POST на основном URI, вы аннулируете одну копию. В противном случае вы можете начать получать непоследовательные результаты из-за разных версий, существующих в кеше.

+0

Хорошо, что это хороший момент, поэтому я бы просто использовал Response.temporaryRedirect в одном из методов – willcodejavaforfood

+0

Да, что-то в этом роде. 303 на самом деле «Смотрите другое», а не «временное перенаправление». –

+0

OK 'Используется в шаблоне redirect-after-POST (aka POST/redirect/GET).' комментарий в JavaDoc испугал меня от того, что – willcodejavaforfood

Смежные вопросы