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?

Tom
sumber

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

kecerdasannya
sumber
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();
  ...
}
glerup
sumber
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

Janak
sumber
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