servicio mkyong headers getforobject example consumir java spring resttemplate

java - mkyong - Spring RestTemplate postForObject with Header: webservice no puede encontrar mis parĂ¡metros de encabezado



resttemplate timeout (2)

Está configurando un encabezado que indica que está publicando un formulario (APPLICATION_FORM_URLENCODED), pero luego establece el ID de la empresa y la contraseña como encabezados HTTP.

Sospecho que desea que esos campos estén en el cuerpo de su solicitud.

También está creando una HttpEntity<String> que indica que va a publicar un cuerpo de solicitud que contiene un String, pero está proporcionando encabezados pero no String.

Si eso no te ayuda a solucionarlo, quizás puedas explicar cómo se verá la solicitud.

Estoy luchando con RestTemplate. Necesito POSTAR alguna información de autenticación a un servicio web de descanso. Puedo enviar una solicitud y recibo una respuesta. Pero de acuerdo con la respuesta, mis parámetros de cabecera no se están transmitiendo. (Enviar la misma solicitud con SOAPUI funciona bien)

Este es mi código:

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

¿Alguien que pueda decirme qué está mal con mi HttpEntity o HttpHeader?

gracias.

Resuelto:

Ok, finalmente lo tengo funcionando.

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

Debido a que también tuve problemas con la respuesta, tal vez pueda ser útil para otros:

@JsonIgnoreProperties(ignoreUnknown = true) public class ItcLoginResponse { public String loginToken; @JsonProperty("token") public String getLoginToken() { return loginToken; } public void setLoginToken(String loginToken) { this.loginToken = loginToken; } }


Puede establecer el valor del encabezado como Autorización

// Establecer el nombre de usuario y la contraseña para crear una solicitud de autenticación básica

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 }