Шаблон Spring Rest ошибка MapStruct 400 BAD_REQUEST

#java #spring #rest #mapstruct

#java #spring #rest #mapstruct

Вопрос:

Имеющая следующую реализацию:

     RestTemplate restTemplate = new RestTemplate();

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("key", "72hdjas721398721");

    Application application = appRepository.findById(customerId)
            .get();
    BasicRequestMapper mapper = Mappers.getMapper(BasicRequestMapper.class);
    BasicRequest basicRequest = mapper.customerToBasicRequest(application);

    HttpEntity<BasicRequest> entity = new HttpEntity<>(basicRequest, headers);      
    try {
        ResponseEntity<Response> response = restTemplate.exchange(url, HttpMethod.POST, entity,
                Response.class);
        return response;
    } catch (HttpClientErrorException e) {
        System.out.println(e.getResponseBodyAsString());
    }
  

Краткое описание реализации: я использую Springs RestTemplate для выполнения POST-запроса, отправляющего POJO по нему.

При выполнении обмена я получаю следующую ошибку:

 2019-03-14 11:19:51.300 DEBUG 7448 --- [           main] o.s.web.client.RestTemplate              : Response 400 BAD_REQUEST
{"key":"unknown.error.found","message":"Unexpected end-of-input in field namen at [Source: java.io.PushbackInputStream@42450be5; line: 1, column: 1523]"}
  

Это сообщение уже обработано серверной частью, следовательно, я получаю «»ключ»:»неизвестно.найденаошибка»,»сообщение» в сообщении об ошибке. Но вторая часть, похоже, является ошибкой, вызванной Джексоном при десериализации сообщения.

Объект, который я отправляю, представляет собой простой POJO с несколькими свойствами с получателями и установщиками. Я использую mapstruct для того, чтобы сопоставлять только те свойства, которые я хочу от объектов, с этим pojo.

Пример: 2019-03-14 11:19:50.763 DEBUG 7448 --- [ main] o.s.web.client.RestTemplate : Writing [BasicRequest [bankAccount=BankAccountDto [iban=DE12500105170648489890, holder=1]] as "application/json"

Можете ли вы, пожалуйста, посоветовать?

Ответ №1:

Просматриваем вывод отладки

 2019-03-14 11:19:50.763 DEBUG 7448 --- [           main] o.s.web.client.RestTemplate              : Writing [BasicRequest [bankAccount=BankAccountDto [iban=DE12500105170648489890, holder=1]] as "application/json"
  

Похоже, что RestTemplate не отправляет наш JSON-контент. Не уверен, как выглядят ваши зависимости. Однако, скорее всего, вам не хватает jackson как зависимости. Если вы добавите его, то он должен отправить правильные данные.

Комментарии:

1. У меня есть jackson в качестве зависимости (транзитивная зависимость как часть spring boot), и она автоматически используется для преобразования сообщений. Она запускается автоматически из-за типа содержимого — в данном случае json.