2013-11-03 5 views
1

내 브라우저에서 나머지 API url이 작동 중이며 XML 결과를 볼 수 있습니다.Spring RestTemplate getForObject() 401 무단 예외 제공

"http://[email protected]:8090/prestashop/api/products/1" 

Java 클라이언트에서이 URL을 호출하여 결과를 얻고 싶습니다. 그 때문에 RestTemplate을 사용하고 있습니다.

String result = restTemplate.getForObject("http://[email protected]:8090/prestashop/api/products/1" 
    , String.class); 

이 다음과 같은 오류를주고,

WARNING: GET request for  http://[email protected]:8090/prestashop/api/products/1 resulted in 401 (Unauthorized); invoking error handler 
Disconnected from the target VM, address: '127.0.0.1:49533', transport: 'socket' 

org.springframework.web.client.HttpClientErrorException: 401 Unauthorized 
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:88) 
at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:537) 

이런 일이 왜 확실하지. RestTemplate을 사용하여 username @ host/appplication 형식의 URL을 호출 할 수 없습니까? RestTemplate에서이 URL을 호출하는 방식이 잘못 되었습니까?

안부, -Lasith.

+2

브라우저에서 해당 URL을 사용하면 어떻게됩니까? 그것도 비밀 번호 또는 인증의 다른 형태로 필요한 것 같습니다? – MattR

+0

아니요, 비밀번호가 필요 없습니다. 브라우저를 통해 XML 형식의 제품 정보를 제공합니다. – lsc

+0

안녕하세요, 저는이 문제를 해결했습니다. username @ host/application이 Spring 테스트 템플릿으로 인식되지 않는 것 같습니다. 따라서 수동으로 권한을 설정해야합니다. DefaultHttpClient httpClient = new DefaultHttpClient(); BasicCredentialsProvider 자격 공급자 = 새 BasicCredentialsProvider(); credentialsProvider.setCredentials (AuthScope.ANY, 새 UsernamePasswordCredentials (user, password)); httpClient.setCredentialsProvider (credentialsProvider); – lsc

답변

2

비슷한 문제가 발생하여 resttemplate.exchange 메소드를 사용하여 해결했습니다.

response = restTemplate.exchange(url, HttpMethod.GET, request, Response.class); 

응답이 내 경우처럼 JSON 형식의 경우, 응답이에 대한 홀더 클래스는 다음과 같습니다 단계는> HttpEntity 내부에 같은 아래의 교환 방식으로이 엔티티를 통과해야하는 RestRequestHeaderInfo에서 인증 세부 정보를 넣어 내 수업 경로에서 잭슨 도서관이 채울 해당 데이터 : 그것은 효과가있었습니다.