2011-01-24 34 views
35

Có thể làm điều gì đó như vậy không?JAX-RS: Nhiều đường dẫn

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() 
    { 
    ... 
    } 
} 

Tôi đang sử dụng RESTEasy.

Trả lời

13

có bạn có thể làm điều đó mặc dù bạn sẽ phải đổi tên các phương thức để chữ ký của chúng khác nhau.

Cập nhật:Kiểm tra Dieter Cailliau của câu trả lời,@Path("/{a:path1|path2}")có lẽ là những gì bạn muốn ...

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

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

bạn có thể kiểm tra API JSR-311 và nó thực hiện tham chiếu có tên là "áo" đó:

JSR311 API

Jersey

+0

Cũng có thể sử dụng thiết bị an toàn? – terry207

64
+19

Nếu có ai quan tâm, tôi đã thử điều này với áo (jax-rs) và nó hoạt động. –

+1

@Path Hỗ trợ biểu thức chính quy được chỉ định trong đặc tả JAX-RS (JSR-339) (ít nhất là trong phiên bản 2.0), vì vậy bất kỳ triển khai nào cũng nên hỗ trợ nó. –

+2

Nếu bạn đang sử dụng đường dẫn tổng hợp, tôi sẽ phải thoát khỏi các dấu gạch chéo như {a: path1 \\/subPath1 | path2 \\/subPath2} – divideByZero

9

Một số thông tin chi tiết thêm về đường dẫn chú thích ...

Là một trạng thái phản ứng trước, biểu thức thông thường được sử dụng với trong các bản đồ tuyên bố con đường chú thích:

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

Bạn có thể khai báo nhiều đường dẫn, nhưng cũng có một hệ thống phân cấp đường dẫn không rõ ràng ngay lập tức với tôi, theo đó đường dẫn chú thích lớp có tiền tố chú thích đường dẫn phương thức sau đây. Người ta có thể viết các lớp sau đây cho một tùy chọn đường dẫn ngắn gọn nhiều mà có thể hữu ích cho phiên bản tài nguyên có lẽ.

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

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

Xin lưu ý một thực tế rằng lớp "BlahResource" đã được công bố với đường dẫn "/ v1" hoặc "/ v2" làm cho tài nguyên truy cập như:

$ curl localhost:8080/v1/blah 
blah 

và cũng

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

Thông số API JAX-RS hơi khó hiểu, có thể tìm thấy tại đây https://docs.oracle.com/javaee/7/api/javax/ws/rs/Path.html#value-- –

+0

Nó không được hỗ trợ bởi vênh vang tại thời điểm https://github.com/OAI/OpenAPI-Specification/ vấn đề/291 –

Các vấn đề liên quan