2010-09-02 26 views
9

là có thể cấu hình phương thức GET để đọc số biến của các tham số URI và diễn giải chúng dưới dạng đối số biến (mảng) hoặc tập hợp? Tôi biết các tham số truy vấn có thể được đọc như danh sách/bộ nhưng tôi không thể đi cho họ trong trường hợp của tôi.Có thể cấu hình phương pháp JAX-RS với số tham số URI khác nhau không?

ví dụ .:

@GET 
@Produces("text/xml") 
@Path("list/{taskId}") 
public String getTaskCheckLists(@PathParam("taskId") int... taskId) { 
    return Arrays.toString(taskId); 
} 

Cảm ơn trước

Trả lời

8

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, các @Path chú thích có thể mất một biểu thức chính quy để xác định một danh sách các thành phần đường. Ví dụ: một cái gì đó như:

@GET 
@Path("/list/{taskid:.+}") 
public String getTaskCheckLists(@PathParam("taskid") List<PathSegment> taskIdList) { 
    ...... 
} 

Có một ví dụ rộng hơn here.

+0

Cảm ơn, đây có lẽ là gần nhất tôi sẽ nhận được vào đó nên bây giờ tôi chỉ cần đặt ở đó regexp phù hợp với con số và chém cho example.com/ws/list/1 hoặc example.com/ws/list/1/2/3/4/5/6 – zeratul021

2

Tôi không gửi câu trả lời này như một câu trả lời vì nó chỉ là một trường hợp cạnh trên currently accepted answer đó là những gì tôi cũng đã sử dụng. Trong trường hợp của tôi (Jersey 1.19) /list/{taskid:.+} sẽ không hoạt động đối với trường hợp cạnh của các tham số biến số không. Thay đổi RegEx thành /list/{taskid:.*} đã quan tâm đến điều đó. Xem thêm this article (có vẻ như có thể áp dụng).

Hơn nữa, khi thay đổi regexp để chỉ cardinality để * (thay vì +) Tôi cũng đã phải đối phó lập trình với trường hợp của chuỗi rỗng như tôi sẽ dịch các List<PathSegment> thành một List<String> (để vượt qua nó vào tôi DB-truy cập mã).

Lý do tôi dịch PathSegment-String là tôi không muốn có một lớp từ gói javax.ws.rs.core gây ô nhiễm lớp đang truy cập dữ liệu của tôi.

Dưới đây là một ví dụ hoàn chỉnh:

@Path("/listDirs/{dirs:.*}") 
@GET 
@Produces(MediaType.APPLICATION_JSON) 
public Response listDirs(@PathParam("dirs") List<PathSegment> pathSegments) { 
    List<String> dirs = new ArrayList<>(); 
    for (PathSegment pathSegment: pathSegments) { 
     String path = pathSegment.getPath(); 
     if ((path!=null) && (!path.trim().equals(""))) 
      dirs.add(pathSegment.getPath()); 
    } 
    List<String> valueFromDB = db.doSomeQuery(dirs); 
    // construct JSON response object ... 
} 
Các vấn đề liên quan