Я разрабатываю клиент в Spring Boot, который POST собирает некоторые данные для удаленной службы REST и получает результат. Я могу отправить его удаленной службе и получить ответ SUCCESS с первой попытки.
Но при последующих попытках я получаю ошибку 404 при отправке того же запроса на удаленный сервер. Я могу добиться того же с помощью Postman или Insomnia Tools, но не могу понять, что это за элемент, которого не хватает Java.
Этот фрагмент отлично работает, если я перезагружаю сервер, что означает, что что-то неправильно застряло с мое приложение, которое мешает получить его POST ed для удаленного обслуживания.
Вот фрагмент
public static ApiResponse postRequest(String url, String apiId, Token token, Product product, String data, Object type)
throws JsonParseException, JsonMappingException, UnsupportedOperationException, IOException {
ObjectMapper mapper = new ObjectMapper();
PolicyResponse mResponse = null;
apiError apiError = null;
ApiResponse apiResponse = new ApiResponse();
InputStream responseStream = null;
try {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.set("User-Agent", "MY Framework"+new Date() + new Random().nextDouble());
headers.set("Content-Type", "application/json");
if(token != null) {
headers.set(HttpHeaders.AUTHORIZATION, "Bearer " + token.getAccessToken());
}
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
headers.setCacheControl("no-cache");
HttpEntity request = new HttpEntity<>(data,headers);
logger.info("Headers " + headers);
if(token != null) {
logger.info("Token " + token.getAccessToken());
}
logger.info("PolicyURL :: " + url);
logger.info("API ID :: " + apiId);
logger.info("Request Data :: " + data);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity <JsonNode>response = restTemplate.exchange(url,
HttpMethod.POST,
request,
JsonNode.class);
logger.debug("Response Data :: " + response.getBody());
mapper.configure(Feature.AUTO_CLOSE_SOURCE, true);
if (null != response) {
apiResponse.setApiId(apiId);
if (response.getStatusCode() == HttpStatus.OK || response.getStatusCode() == HttpStatus.CREATED) {
apiResponse.setHttpResponse(response.getBody().toString());
apiResponse.setJsonNode(response.getBody());
logger.debug(response.getBody().toString());
} else {
logger.debug("Error Response " + response.getBody());
apiError apiError = mapper.readValue(response.getBody().toString(), new TypeReference<apiError>() {
});
apiResponse.setHttpResponse(response.getBody().toString());
apiResponse.setHttpResponseMessage(apiError.getMessage());
}
}
apiResponse.setHttpStatusCode(String.valueOf(response.getStatusCode()));
}
catch(HttpClientErrorException hcee) {
logger.error(hcee.getCause());
logger.error(hcee.getResponseBodyAsString());
apiResponse.setHttpStatusCode(String.valueOf(hcee.getRawStatusCode()));
apiResponse.setHttpResponse(hcee.getResponseBodyAsString());
apiResponse.setHttpResponseMessage(hcee.getMessage());
}
finally {
if(responseStream != null) {
responseStream.close();
}
}
return apiResponse;
}
Заранее спасибо.