Http Response 엔티티를 읽을 때 왜 내 코드가 쓰레기 데이터를 제공하는지 알 수 없습니다. 400 응답을 유발하는 데이터로 특정 URL로 요청을 발행 할 때만 발생합니다. 내 코드는 응답 엔티티를 읽으려고 시도하지만, 아래에서 볼 수 있듯이 쓰레기입니다.왜 Jersey Client 응답에서 가비지 데이터를 제공합니까?
import org.junit.Test;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
import java.util.List;
import java.util.Map;
public class Sandbox {
@Test
public void jaguarTestCase() {
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://www.jaguarusa.com/owners/vin-recall.html?view=vinRecallQuery&vin=xxxxxxxxxxxxxxxxx");
Invocation.Builder builder = target.request();
Response response = builder.get(Response.class);
System.out.println("Response Code:");
System.out.println("\t" + response.getStatus() + " - " + response.getStatusInfo().getReasonPhrase());
System.out.println("\nResponse Headers:");
for (Map.Entry<String, List<String>> entry : response.getStringHeaders().entrySet()) {
System.out.print("\t" + entry.getKey() + ": ");
for (String value : entry.getValue()) {
System.out.println(value);
}
}
String responseEntity = response.readEntity(String.class);
System.out.println("\nResponse Entity: ");
System.out.println(responseEntity);
}
}
그리고 그 테스트 케이스의 출력 :
Response Code:
400 - Bad Request
Response Headers:
X-Frame-Options: SAMEORIGIN
Cache-Control: no-cache, no-store, must-revalidate
Server: Apache-Coyote/1.1
Connection: keep-alive
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 135
Date: Tue, 08 Nov 2016 00:03:23 GMT
Content-Language: en-US
Content-Type: application/json;charset=UTF-8
Response Entity:
� \�1
�@E��:H
���B��C2����X�wנ��z�{%1�vw��:ga�����4$ ������k�Q�-i�����y��T��!f��� c� ��iK-��?z� ���dW��
이 엔터티 본문이 수 (모든 브라우저에 URL을 붙여 가정하고있는 것이다 여기
는 단순화 된 테스트 케이스입니다) 자신에 대한 참조 : 나는 JDK 버전 1.8.0_102을 사용하고{
"errorMessage" : "Please check your details and try again.",
"error" : 400,
"errorTitle" : "Sorry, that is not a valid VIN.",
"vin" : "XXXXXXXXXXXXXXXXX"
}
. 나는 135라는보고 된 content-length가 올바른 값이며 Chrome 브라우저 디버그 창에서이 요청을 실행하여 확인했기 때문에 응답 엔티티가 구문 분석 될 때 문제가 발생했다고 생각합니다.
Content-Type 응답 헤더에는 JVM이 실행되는 charset = UTF-8이 표시됩니다. 뭐라 구요? 나는 오후 내내이 일을하고 난 후 완전히 혼란스러워. 당신이 당신의 응답 헤더를 검사하는 경우
'Content-Encoding : gzip'을 참조하십시오. –
빙고! 제가 gzip의 Accept-Encoding 헤더를 보내지 않았기 때문에 제가 배제했다고 생각했습니다. 200 응답을 리턴하는 요청을 발행하면 gzipped되지 않습니다. 응답이 400 인 경우 Accept-Encoding 요청 헤더를 무시하는 버그가 서버 측에있는 것 같습니다. –
답변 대신 댓글로 추가하면 해결책으로 받아 들일 것입니다. –