Bagaimana cara mengambil semua parameter kueri di Jersey JaxRS?


91

Saya membangun layanan web generik dan perlu mengambil semua parameter kueri menjadi satu string untuk penguraian nanti. Bagaimana saya bisa melakukan ini?

Jawaban:


163

Anda dapat mengakses satu param melalui @QueryParam("name")atau semua params melalui konteks:

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

Kuncinya adalah @Context anotasi jax-rs , yang dapat digunakan untuk mengakses:

UriInfo, Request, HttpHeaders, SecurityContext, Providers


Bisakah kita menggunakan dengan GET?
Merasa baik dan memprogram

33

Bagian kueri yang tidak diurai dari URI permintaan dapat diperoleh dari UriInfoobjek:

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

4

Menambahkan sedikit lebih banyak pada jawaban yang diterima. Dimungkinkan juga untuk mendapatkan semua parameter kueri dengan cara berikut tanpa menambahkan parameter tambahan ke metode yang mungkin berguna saat memelihara dokumentasi 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


Meskipun ini berfungsi, saya tidak akan merekomendasikannya. Jika Anda dapat menjaga kode tetap berfungsi murni, Anda harus mencobanya - ini adalah pendekatan yang lebih baik.
martyglaubitz

1
Meskipun benar, saya menggunakan pendekatan ini dengan superclass untuk mencatat parameter secara otomatis, dan ini bekerja dengan sangat baik. Jauh lebih bersih daripada harus melewatkan parameter dengan setiap permintaan. Kadang-kadang kemurnian fungsional hanya perlu melihat ke arah lain selama beberapa detik sementara pemrograman pragmatis mengambil kendali atas keyboard :)
Paul Russell
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.