Почтальон / Бессонница возвращает 200, но Java клиент возвращает 404 при повторной подаче - PullRequest
0 голосов
/ 04 февраля 2020

Я разрабатываю клиент в 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;
}

Заранее спасибо.

1 Ответ

0 голосов
/ 05 февраля 2020

Это была моя ошибка, когда каким-то другим потоком выводился URL на лету, и это вызывало проблему.

Я отладил и исправил это.

Спасибо всем, кто был вовлечен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...