Spring MVC RestTemplate POST с использованием JSON - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть Spring MVC Rest Controller, который просто добавляет запись клиента.Моя служба отдыха проходит через JSON и работает нормально, когда я звоню из веб-клиента или тестового стенда, такого как Soap-UI.Однако, когда я пытаюсь POST использовать RestTemplate, я получаю исключение JacksonMappingException: невозможно создать экземпляр CustomerObject, проблема: не найден подходящий метод создателя.

Это явно связано с тем, как я создаю запрос JSON,чтобы добавить немного мяса к костям, вот что я делаю:

Мои тестовые сообщения с использованием RestTemplate

 @Test
 public void postCustomerIntegrationTest() throws Exception{

    String JSONInput = ("{" +
          "  \"firstName\": \"Anouska\"," +
          "  \"lastName\": \"Williams\"," +
          "  \"email\": \"Anouska@place.com\"," +
          "  \"cardBin1\": 123456768," +
          "  \"cardBin2\": 123456789," +
          "  \"language\": \"Spanish\"," +
          "  \"country\": \"Mexico\"," +
          "  \"product\": \"shit\"," +
          "  \"telephoneNumber\": 447869995262," +
          "  \"termsAndConditions\": \"true\"" +
          "}");

  HttpHeaders headers = new HttpHeaders();
  headers.setContentType(MediaType.APPLICATION_JSON);

  HttpEntity request= new HttpEntity(JSONInput, headers);

Registration output = restTemplate.postForObject(BASE_URL, request, CustomerObject.class);

assertNotNull("no person",output);
assertNotNull(output.getId());
assertEquals("Bob", output.getFirstName());

}

Мой RestTemplate подключается через Spring следующим образом:

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<property name="messageConverters">
    <list>
        <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
            <property name="supportedMediaTypes" value="application/json" />
        </bean>
    </list>
</property>
</bean>

Тестовый JSON, который я здесь использую, аналогичен тесту JSON, который я использую в Soap-UI.Отладив код, он выглядит так, как будто он рассматривает мой JSON как строку, а Джексон пытается преобразовать все, потому что не может найти ассоциированное поле (что, конечно, не может).

Iдумаю, мне нужно знать, как передать JSON в мой RestTemplate таким образом, чтобы запрос был обработан в правильном формате JSON.Я провел все утро, пытаясь найти пример, и нигде не могу его найти.

Большое спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 02 июля 2013

Существует как минимум одна проблема, последний параметр должен быть классом ответа

Registration output = restTemplate.postForObject(BASE_URL, request, Registration.class);
0 голосов
/ 13 сентября 2014

Это мой способ публикации josn:

CustomerObject object = template.postForObject(
            BASE_URL, request, CustomerObject.class);

И класс CustomerObject должен иметь поля: firstName, lastName ...

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