2012-04-14 21 views
12

Tôi đang xây dựng ứng dụng web bằng RESTNetbean 7.1.1 Glassfish 3.1.2REST cách truyền thông số đường dẫn trống?

tôi có 2 URL:

"http://myPage/resource/getall/name" (get some data by name) 

"http://myPage/resource/getall" (get all data) 

Khi client gửi yêu cầu sử dụng URL đầu tiên, servlet dưới đây được gọi và thực hiện một số quy trình.

@Path("getall/{name}") 
@GET 
@Produces("application/json") 
public Object Getall(@PathParam("name") String customerName) { 
     //here I want to call SQL if customerName is not null. is it possible??? 
} 

Nhưng tôi cũng muốn URL thứ hai gọi servlet này.

Tôi nghĩ rằng servlet sẽ được gọi và tôi chỉ có thể kiểm tra customerName == null và sau đó gọi SQL khác nhau và vv.

Nhưng khi máy khách gửi yêu cầu sử dụng URL thứ hai (tức là không có tham số đường dẫn), servlet không được gọi vì URL không có tham số đường dẫn {name}.

Không thể gọi URL thứ hai và gọi servlet ở trên?

Một thay thế tôi có thể nghĩ đến là sử dụng query parameter:

http://myPage/resource/getall?name=value 

lẽ tôi có thể phân tích nó và xem nếu "value" là null sau đó có hành động phù hợp ..

Trả lời

26

Bạn có thể chỉ định một biểu thức chính quy cho Thông số đường dẫn của bạn (xem 2.1.1. @Path).

Nếu bạn sử dụng .* trận cả hai trống rỗng và không tên rỗng Vì vậy, nếu bạn viết:

@GET 
@Path("getall/{name: .*}") 
@Produces("application/json") 
public Object Getall(@PathParam("name") String customerName) { 
     //here I want to call SQL if customerName is not null. is it possible??? 
} 

nó sẽ phù hợp với cả hai "http: // myPage/tài nguyên/GetAll" và "http: // myPage/resource/getall/name ".

+0

Cảm ơn bạn, tôi đã thử ở trên và hoạt động hoàn hảo! –

+0

Xin chào! Điều gì xảy ra nếu tình huống tiếp theo: "http: // myPage/resource/getall/name? Type = json" "http: // myPage/resource/getall? Type = json" Giải pháp trên không hoạt động. – Andrew

+0

@Andrew, vui lòng tạo câu hỏi mới. Nếu không có bất kỳ ngữ cảnh nào thì không thể trả lời được câu hỏi. – andih

-2
@GET 
@Path("getall{name:(/[^/]+?)?}") 
@Produces("application/json") 
public Object Getall(@PathParam("name") String customerName) { 
    //here I want to call SQL if customerName is not null. is it  

possible??? 
    } 
+0

khớp với cả tên có hoặc không có tên, –

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