Подтвердить что ты не робот

Spring RestTemplate postForObject с заголовком: webservice не может найти параметры моего заголовка

Я борюсь с RestTemplate. Мне нужно ПОЧТИ часть информации аутентификации в веб-службу отдыха. Я могу отправить запрос, и я получаю ответ. Но в соответствии с ответом мои параметры заголовка не проходят. (Отправка одного и того же запроса в SOAPUI работает нормально)

Это мой код:

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);

Любой, кто может сказать мне, что случилось с моей HttpEntity или HttpHeader?

спасибо.

РЕШИТЬ:

Хорошо, наконец, он работает.

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;
    }
}
4b9b3361

Ответ 1

Вы устанавливаете заголовок, указывающий, что вы отправляете форму (APPLICATION_FORM_URLENCODED), но затем устанавливаете companyId и пароль как HTTP-заголовки.

Я подозреваю, что вы хотите, чтобы эти поля находились в теле вашего запроса.

Вы также создаете HttpEntity<String>, который указывает, что вы отправляете тело запроса, содержащее String, но вы предоставляете заголовки, но не String.

Если это не поможет вам исправить это, возможно, вы можете объяснить, как должен выглядеть запрос.

Ответ 2

Вы можете установить значение заголовка как авторизацию

//Задайте имя пользователя и пароль для создания основного запроса Auth

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
}