ฉันกำลังสร้างบริการเว็บทั่วไปและจำเป็นต้องดึงพารามิเตอร์การสืบค้นทั้งหมดมารวมกันเป็นสตริงเดียวเพื่อใช้ในการแยกวิเคราะห์ในภายหลัง ฉันจะทำเช่นนี้ได้อย่างไร?
ฉันกำลังสร้างบริการเว็บทั่วไปและจำเป็นต้องดึงพารามิเตอร์การสืบค้นทั้งหมดมารวมกันเป็นสตริงเดียวเพื่อใช้ในการแยกวิเคราะห์ในภายหลัง ฉันจะทำเช่นนี้ได้อย่างไร?
คำตอบ:
คุณสามารถเข้าถึงพารามิเตอร์เดียวผ่าน@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
ส่วนแบบสอบถามที่ไม่ได้แยกวิเคราะห์ของ URI คำขอสามารถรับได้จากUriInfo
ออบเจ็กต์:
@GET
public Representation get(@Context UriInfo uriInfo) {
String query = uriInfo.getRequestUri().getQuery();
...
}
เพิ่มอีกเล็กน้อยในคำตอบที่ยอมรับ นอกจากนี้ยังเป็นไปได้ที่จะรับพารามิเตอร์การสืบค้นทั้งหมดด้วยวิธีต่อไปนี้โดยไม่ต้องเพิ่มพารามิเตอร์เพิ่มเติมให้กับวิธีการซึ่งอาจมีประโยชน์เมื่อดูแลรักษาเอกสารเกี่ยวกับการกรีดกราย
@Context
private UriInfo uriInfo;
@POST
public Response postSomething(@QueryParam("name") String name) {
MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
String nameParam = queryParams.getFirst("name");
}