2012-07-20 7 views
30

私はRestTemplateで苦労しています。私はいくつかの認証情報を残りのWebサービスにPOSTする必要があります。私は要求を送ることができ、私は応答を得る。しかし、私のヘッダーのパラメータは、通過していない応答によると。 (SOAPUIと同じ要求を送信すると、正常に動作します)Spring RestTemplate postForObject with header:webserviceが私のヘッダパラメータを見つけることができません。

これは私のコードです:私のHttpEntityまたはHttpHeaderと間違っているものを私に伝えることができ

HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 
headers.add("companyId", companyId); 
headers.add("password", password);    

HttpEntity<String> request = new HttpEntity<String>(headers); 

RestTemplate restTemplate = new RestTemplate(); 

List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); 
messageConverters.add(new MappingJacksonHttpMessageConverter());   
restTemplate.setMessageConverters(messageConverters); 

LoginResponse response = (LoginResponse)restTemplate.postForObject(url, request, LoginResponse.class); 

誰ですか?

ありがとうございました。

は解決:

[OK]を、最終的にはそれが働いてしまいました。私も応答に苦労していたので

MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>(); 
map.add("companyId", companyId); 
map.add("password", password); 

HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);  

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers); 

List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); 
messageConverters.add(new MappingJacksonHttpMessageConverter());  
messageConverters.add(new FormHttpMessageConverter()); 
restTemplate.setMessageConverters(messageConverters); 

LoginResponse response = (LoginResponse) restTemplate.postForObject(url, request, LoginResponse.class); 

が、多分それは他の人に役立つことができます:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class ItcLoginResponse { 

    public String loginToken; 

    @JsonProperty("token") 
    public String getLoginToken() { 
     return loginToken; 
    } 

    public void setLoginToken(String loginToken) { 
     this.loginToken = loginToken; 
    } 
} 
+0

更新作成するためのユーザー名とパスワードを設定し

//としてヘッダの値を設定することができます使用「をMappingJackson2HttpMessageConverter」の代わりの古い「MappingJacksonHttpMessageConverter」 – Udo

+0

あなたのソリューションでは、messageConvertersインスタンスがUnusedであるようですね。 –

答えて

5

あなたはフォームを投稿している示すヘッダ(APPLICATION_FORM_URLENCODED)を設定しています、 companyIdとpasswordをHTTPヘッダーとして設定します。

これらのフィールドがあなたの要求の本文に含まれていると思われます。

また、HttpEntity<String>を作成しています。これは、文字列を含むリクエスト本文を投稿するつもりだが、ヘッダーは提供していても文字列は提供していないことを示しています。

これで解決できない場合は、リクエストがどのように表示されるのか説明できます。

-1

あなたは承認基本認証要求

HttpAuthentication authHeader = new HttpBasicAuthentication(username, password); 
HttpHeaders requestHeaders = new HttpHeaders(); 
requestHeaders.setAuthorization(authHeader); 
HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders); 

// Create a new RestTemplate instance 
RestTemplate restTemplate = new RestTemplate(); 

// Add the String message converter 
restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 

try { 

    // Make the HTTP GET request to the Basic Auth protected URL 
    ResponseEntity<Message> response = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class); 

    return response.getBody(); 

} catch (HttpClientErrorException e) { 

    Log.e(TAG, e.getLocalizedMessage(), e); 
    // Handle 401 Unauthorized response 
} 
+3

どの 'HttpHeaders'バージョンを使用していますか?私は 'setAuthorization(..)'メソッドを持っていません。 – Abdull

+0

質問はポストコールノットコールについてです – user2531799

関連する問題