Ola,
Estou usando o RestTemplate.class para consumir serviços externos, cheguei em um ponto onde tenho que fazer o login para depois consumir um endpoint.
Porem não estou conseguindo executar os dois passos ao mesmo tempo. Alguem ja passou por isso?
Deu uma olhada no baeldung?
Olhei agora e pelo que entendi(ou não), antes de qualquer requisição ele seta um basic authentication no header.
No caso eu preciso fazer o login(json), esperar o retorno e depois executar outra requisicao(post form data).
Bota um exemplo do teu código ai mano, pra ver se consigo ajudar… a implementação padrão é síncrona, não estou entendendo tua dificuldade.
Segue codigo de exemplo:
private Response login() {
try {
setRequestFactory(new HttpComponentsClientHttpRequestFactory(HttpClientBuilder.create().build()));
defineHeaders().setContentType(MediaType.APPLICATION_JSON);
response = post(api.concat(URI_LOGIN_ACCESS),
HttpMethod.POST,
new Request(user, pass),
Response.class);
} catch (HttpClientErrorException | HttpServerErrorException e) {
e.printStackTrace();
}
return (Response) response.getBody();
}
public Response validate(Request request) {
validateLogin(login());
defineHeaders().setContentType(MediaType.APPLICATION_FORM_URLENCODED);
try {
response = post(api.concat(URI_GET_BY_IP),
HttpMethod.POST,
generateMapParameter(request),
Response.class);
} catch (HttpClientErrorException | HttpServerErrorException e) {
e.printStackTrace();
}
return (Response) response.getBody();
}
Tenho essa reescrita para setar o cookie da conexão
@Override
protected <T extends Object> T doExecute(URI url, HttpMethod method, final RequestCallback requestCallback, final ResponseExtractor<T> responseExtractor) throws RestClientException {
final List<HttpCookie> cookies = getCoookies();
return super.doExecute(url, method, new RequestCallback() {
@Override
public void doWithRequest(ClientHttpRequest chr) throws IOException {
if (cookies != null) {
StringBuilder sb = new StringBuilder();
for (HttpCookie cookie : cookies) {
sb.append(cookie.getName()).append("=").append(cookie.getValue()).append(";");
}
chr.getHeaders().add("Cookie", sb.toString());
}
requestCallback.doWithRequest(chr);
}
}, new ResponseExtractor<T>() {
@Override
public T extractData(ClientHttpResponse chr) throws IOException {
processHeaders(chr.getHeaders());
return responseExtractor.extractData(chr);
}
});
}