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, 공급자


GET과 함께 사용할 수 있습니까?
기분이 좋고 프로그래밍

33

요청 URI의 구문 분석되지 않은 쿼리 부분은 UriInfo객체 에서 가져올 수 있습니다 .

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

4

받아 들여지는 대답에 조금 더 추가하십시오. 또한 방법에 추가 매개 변수를 추가하지 않고도 다음과 같은 방법으로 모든 쿼리 매개 변수를 가져올 수 있으며 이는 swagger 문서를 유지할 때 유용 할 수 있습니다.

@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
엄밀히 말하면이 접근 방식을 수퍼 클래스와 함께 사용하여 매개 변수를 자동으로 기록하고 있으며 매우 잘 작동합니다. 각 요청에 매개 변수를 전달하는 것보다 훨씬 깔끔합니다. 때로는 기능 순도는 실용적인 프로그래밍 : 키보드의 제어를 취하면서 단 몇 초 동안 다른 방법을 찾기 위해 필요
폴 러셀
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.