List as query 매개 변수가있는 GET 서비스에 대해 Jersey 클라이언트를 만들고 있습니다. 문서 에 따르면 List를 쿼리 매개 변수로 사용할 수 있습니다 (이 정보는 @QueryParam javadoc에도 있음). 확인하십시오.
일반적으로 Java 유형의 메소드 매개 변수는 다음과 같습니다.
- 원시 유형이어야합니다.
- 단일 String 인수를 허용하는 생성자가 있어야합니다.
- 단일 문자열 인수를 허용하는 valueOf 또는 fromString이라는 정적 메소드가 있습니다 (예 : Integer.valueOf (String) 및 java.util.UUID.fromString (String)). 또는
- List, Set 또는 SortedSet이어야합니다. 여기서 T는 위의 2 또는 3을 충족합니다. 결과 컬렉션은 읽기 전용입니다.
때때로 매개 변수는 동일한 이름에 대해 둘 이상의 값을 포함 할 수 있습니다. 이 경우 4)의 유형을 사용하여 모든 값을 얻을 수 있습니다.
그러나 Jersey 클라이언트를 사용하여 List 쿼리 매개 변수를 추가하는 방법을 알 수 없습니다.
대체 솔루션은 다음과 같습니다.
- GET 대신 POST를 사용하십시오.
- 목록을 JSON 문자열로 변환하고 서비스에 전달합니다.
서비스에 대한 적절한 HTTP 동사가 GET이기 때문에 첫 번째는 좋지 않습니다. 데이터 검색 작업입니다.
두 번째는 당신이 나를 도울 수 없다면 나의 선택이 될 것입니다. :)
또한 서비스를 개발 중이므로 필요에 따라 변경할 수 있습니다.
감사!
최신 정보
클라이언트 코드 (json 사용)
Client client = Client.create();
WebResource webResource = client.resource(uri.toString());
SearchWrapper sw = new SearchWrapper(termo, pagina, ordenacao, hits, SEARCH_VIEW, navegadores);
MultivaluedMap<String, String> params = new MultivaluedMapImpl();
params.add("user", user.toUpperCase());
params.add("searchWrapperAsJSON", (new Gson()).toJson(sw));
ClientResponse clientResponse = webResource .path("/listar")
.queryParams(params)
.header(HttpHeaders.AUTHORIZATION, AuthenticationHelper.getBasicAuthHeader())
.get(ClientResponse.class);
SearchResultWrapper busca = clientResponse.getEntity(new GenericType<SearchResultWrapper>() {});