2011-01-24 3 views
35

Можно ли что-то сделать?JAX-RS: Несколько путей

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 

public class xxx 
{ 
    @GET 
    @Path(value = "path1") 
    public Response m1() 
    { 
    ... 
    } 

    @GET 
    @Path(value = "path2") 
    public Response m2() 
    { 
    ... 
    } 
} 

Я использую RESTEasy.

ответ

13

да, вы можете это сделать, хотя вам придется переименовать свои методы, чтобы их подпись отличалась.

Update:Проверить ответ Дитера Кайо, в@Path("/{a:path1|path2}"), вероятно, что вы хотите ...

public class BlahResource{ 
    @GET 
    @Path("path1") 
    public Response m1(){ 
     return Response.ok("blah").build(); 
    } 

    @GET 
    @Path("path2") 
    public Response m2(){ 
     return this.m1(); 
} 

вы можете проверить API JSR-311 и это эталонная реализация под названием "джерси" есть:

JSR311 API

Jersey

+0

Возможно также использование resteasy? – terry207

64
+19

Если кто-то заинтересован, я попробовал это с jersey (jax-rs), и это сработало. –

+1

Поддержка регулярного выражения @Path указана в спецификации JAX-RS (JSR-339) (по крайней мере, в версии 2.0), поэтому любая реализация должна ее поддерживать. –

+2

Если вы используете композитный путь, мне придется избегать косых черт, например {a: path1 \\/subPath1 | path2 \\/subPath2} – divideByZero

9

Некоторые дополнительные подробности о Path аннотацию ...

Как предыдущее состояние ответов, регулярные выражения, которые будут использоваться с аннотированной отображения декларации пути:

{" variable-name [ ":" regular-expression ] "} 

Вы можете объявить несколько путей, но есть также иерархия путей, которая не была сразу очевидна для меня, когда класс аннотированный путь префиксы следующие аннотации пути метода. Можно написать следующий класс для краткой опции с несколькими путями, которая может быть полезна для управления версиями ресурсов.

@Path("/{a:v1|v2}") 
@Produces("text/*") 
public class BlahResource { 

    @GET 
    @Path("/blah") 
    public Response m1() { 
     return Response.ok("blah").build(); 
    } 
} 

Пожалуйста, обратите внимание на то, что класс "BlahResource" был объявлен с путем "/ v1" или "/ v2", что делает этот ресурс доступным, как:

$ curl localhost:8080/v1/blah 
blah 

, а также

$ curl localhost:8080/v2/blah 
blah 
+0

. Несколько запутанную спецификацию API JAX-RS можно найти здесь https://docs.oracle.com/javaee/7/api/javax/ws/rs/Path.html#value-- –

+0

Он не поддерживается чванством в настоящий момент https://github.com/OAI/OpenAPI-Specification/ вопросы/291 –