Tôi đang tạo một ứng dụng khách Jersey cho một dịch vụ GET có tham số Truy vấn Danh sách. Theo tài liệu , có thể có Danh sách làm tham số truy vấn (thông tin này cũng có tại @QueryParam javadoc), hãy kiểm tra:
Nói chung, kiểu Java của tham số phương thức có thể:
- Là một loại nguyên thủy;
- Có một hàm tạo chấp nhận một đối số Chuỗi đơn lẻ;
- Có một phương thức tĩnh có tên valueOf hoặc fromString chấp nhận một đối số Chuỗi (ví dụ: xem, ví dụ: Integer.valueOf (Chuỗi) và java.util.UUID.fromString (Chuỗi)); hoặc là
- Be List, Set hoặc SortedSet, trong đó T thỏa mãn 2 hoặc 3 ở trên. Bộ sưu tập kết quả là chỉ đọc.
Đôi khi các tham số có thể chứa nhiều hơn một giá trị cho cùng một tên. Nếu trường hợp này xảy ra thì các loại trong 4) có thể được sử dụng để lấy tất cả các giá trị.
Tuy nhiên, tôi không thể tìm ra cách thêm tham số truy vấn Danh sách bằng ứng dụng khách Jersey.
Tôi hiểu các giải pháp thay thế là:
- Sử dụng POST thay vì GET;
- Chuyển Danh sách thành một chuỗi JSON và chuyển nó đến dịch vụ.
Cách đầu tiên không tốt, vì động từ HTTP thích hợp cho dịch vụ là GET. Nó là một hoạt động truy xuất dữ liệu.
Lựa chọn thứ hai sẽ là lựa chọn của tôi nếu bạn không thể giúp tôi. :)
Tôi cũng đang phát triển dịch vụ, vì vậy tôi có thể thay đổi nó nếu cần.
Cảm ơn!
Cập nhật
Mã khách hàng (sử dụng json)
Client client = Client.create();
WebResource webResource = client.resource(uri.toString());
SearchWrapper sw = new SearchWrapper(termo, pagina, ordenacao, hits, SEARCH_VIEW, navegadores);
MultivaluedMap<String, String> params = new MultivaluedMapImpl();
params.add("user", user.toUpperCase());
params.add("searchWrapperAsJSON", (new Gson()).toJson(sw));
ClientResponse clientResponse = webResource .path("/listar")
.queryParams(params)
.header(HttpHeaders.AUTHORIZATION, AuthenticationHelper.getBasicAuthHeader())
.get(ClientResponse.class);
SearchResultWrapper busca = clientResponse.getEntity(new GenericType<SearchResultWrapper>() {});