ฉันจะคว้าพารามิเตอร์การสืบค้นทั้งหมดใน Jersey JaxRS ได้อย่างไร


91

ฉันกำลังสร้างบริการเว็บทั่วไปและจำเป็นต้องดึงพารามิเตอร์การสืบค้นทั้งหมดมารวมกันเป็นสตริงเดียวเพื่อใช้ในการแยกวิเคราะห์ในภายหลัง ฉันจะทำเช่นนี้ได้อย่างไร?

คำตอบ:


163

คุณสามารถเข้าถึงพารามิเตอร์เดียวผ่าน@QueryParam("name")หรือพารามิเตอร์ทั้งหมดผ่านบริบท:

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

กุญแจสำคัญคือ@Context คำอธิบายประกอบ jax-rsซึ่งสามารถใช้เพื่อเข้าถึง:

UriInfo, คำขอ, HttpHeaders, SecurityContext, Providers



33

ส่วนแบบสอบถามที่ไม่ได้แยกวิเคราะห์ของ URI คำขอสามารถรับได้จากUriInfoออบเจ็กต์:

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

4

เพิ่มอีกเล็กน้อยในคำตอบที่ยอมรับ นอกจากนี้ยังเป็นไปได้ที่จะรับพารามิเตอร์การสืบค้นทั้งหมดด้วยวิธีต่อไปนี้โดยไม่ต้องเพิ่มพารามิเตอร์เพิ่มเติมให้กับวิธีการซึ่งอาจมีประโยชน์เมื่อดูแลรักษาเอกสารเกี่ยวกับการกรีดกราย

@Context
private UriInfo uriInfo;

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

อ้างอิง


แม้ว่าจะใช้งานได้ฉันจะไม่แนะนำ หากคุณสามารถรักษารหัสให้ใช้งานได้จริงคุณควรลองใช้ - เป็นแนวทางที่ดีกว่า
martyglaubitz

1
แม้ว่าจะถูกต้องอย่างเคร่งครัด แต่ฉันใช้วิธีนี้กับซูเปอร์คลาสเพื่อบันทึกพารามิเตอร์โดยอัตโนมัติและมันก็ใช้ได้ผลดีมาก สะอาดกว่าการต้องส่งผ่านพารามิเตอร์ในแต่ละคำขอ บางครั้งความบริสุทธิ์ในการใช้งานจำเป็นต้องมองไปทางอื่นสักครู่ในขณะที่การเขียนโปรแกรมเชิงปฏิบัติจะควบคุมแป้นพิมพ์ :)
Paul Russell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.