Làm cách nào để lấy tất cả các tham số truy vấn trong Jersey JaxRS?


91

Tôi đang xây dựng một dịch vụ web chung và cần lấy tất cả các tham số truy vấn thành một chuỗi để phân tích cú pháp sau này. Tôi có thể làm cái này như thế nào?

Câu trả lời:


163

Bạn có thể truy cập một tham số thông qua @QueryParam("name")hoặc tất cả các tham số thông qua ngữ cảnh:

@POST
public Response postSomething(@QueryParam("name") String name, @Context UriInfo uriInfo, String content) {
     MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
     String nameParam = queryParams.getFirst("name");
}

Chìa khóa là @Context chú thích jax-rs , có thể được sử dụng để truy cập:

UriInfo, Yêu cầu, HttpHeaders, SecurityContext, Nhà cung cấp


Chúng ta có thể sử dụng với GET không?
cảm giác tốt và lập trình

33

Phần truy vấn chưa được phân tích cú pháp của URI yêu cầu có thể được lấy từ UriInfođối tượng:

@GET
public Representation get(@Context UriInfo uriInfo) {
  String query = uriInfo.getRequestUri().getQuery();
  ...
}

4

Thêm một chút nữa vào câu trả lời được chấp nhận. Cũng có thể lấy tất cả các tham số truy vấn theo cách sau mà không cần thêm tham số bổ sung vào phương thức, điều này có thể hữu ích khi duy trì tài liệu swagger.

@Context
private UriInfo uriInfo;

@POST
public Response postSomething(@QueryParam("name") String name) {
     MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
     String nameParam = queryParams.getFirst("name");
}

ref


Mặc dù điều này hiệu quả, nhưng tôi không khuyên bạn nên sử dụng nó. Nếu bạn có thể giữ chức năng mã thuần túy, bạn nên thử nó - đó là cách tiếp cận tốt hơn.
Martyglaubitz

1
Mặc dù hoàn toàn chính xác, tôi đang sử dụng phương pháp này với một lớp cha để tự động ghi lại các tham số và nó hoạt động rất độc đáo. Gọn gàng hơn nhiều so với việc phải chuyển các tham số với mỗi yêu cầu. Đôi khi sự tinh khiết chức năng cần chỉ cần nhìn theo cách khác trong vài giây trong khi lập trình thực tế nắm quyền điều khiển bàn phím :)
Paul Russell
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.