HttpMessageNotReadable Exceotion: ошибка синтаксического анализа JSON: невозможно десериализовать экземпляр ArrayList из маркера начального объекта - PullRequest
0 голосов
/ 19 октября 2018

У меня есть конечная точка

@GetMapping(value = "/accounts/{accountId}/placementInfo", headers = "version=1")
  @ResponseStatus(HttpStatus.OK)
  public List<PlacementDetail> findPlacementDetailByPlacementInfoAtTime(@PathVariable("accountId") Long accountId,
                                                                        @RequestParam(value = "searchDate", required = false)
                                                                        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate searchDate) {}

И я отправляю запрос, используя шаблон отдыха

placementResponseEntity = restTemplate.exchange(placementUriBuilder(accountId, searchDate), HttpMethod.GET,
          apiRequestEntity,new ParameterizedTypeReference<List<PlacementDetail>>() {});

с помощью вспомогательного метода

 private String placementUriBuilder(long accountId, LocalDate searchDate) throws IOException {
        String resourceUri = ACCOUNT_RESOURCE_URI_START + accountId + PLACEMENT_DETAIL_RESOURCE_URI_END;
        String url;

        if(searchDate != null) {
          url = UriComponentsBuilder.fromUri(serverUri.getUri()).path(resourceUri).queryParam("searchDate", searchDate.format(DateTimeFormatter.ISO_DATE)).build().toUriString();
        } else {
          url = UriComponentsBuilder.fromUri(serverUri.getUri()).path(resourceUri).build().toUriString();
        }
        return url;
      }

Когда япосмотрите, что ТАК люди говорят об отправке объекта и сбое, так как созданный JSON находится в неправильном формате, но здесь это get api, и я не понимаю источник проблемы.

1 Ответ

0 голосов
/ 19 октября 2018

Обычно это вызвано отсутствием обработчика ошибок на вашем RestTemplate.Ваш сервер отвечает с ошибкой, и ваш клиент пытается десериализовать его до List<PlacementDetail>.Чтобы решить эту проблему, вы должны правильно обрабатывать коды ошибок HTTP.

См. Фрагмент ниже.

@Configuration
public class ClientConfig {

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
        return restTemplateBuilder
                .errorHandler(new ClientErrorHandler())
                .build();
    }


    public class ClientErrorHandler implements ResponseErrorHandler {

        @Override
        public boolean hasError(ClientHttpResponse httpResponse) throws IOException {
            // check if HTTP status signals an error response
            return !HttpStatus.OK.equals(httpResponse.getStatusCode());
        }

        @Override
        public void handleError(ClientHttpResponse httpResponse) throws IOException {
            // handle exception case as you see fit
            throw new RuntimeException("Error while making request");
        }

    }

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