параметры POST restTemplate из сложного объекта - PullRequest
4 голосов
/ 14 октября 2010

Я пытаюсь протестировать наш REST-сервис, используя restTemplate, используя метод postForObject (...).

модульный тест:

@Test
    public void testPostOrder() {
        String url = BASE_URL + "/orders/";
        OrderDto orderDtoInput = new OrderDto();
        orderDtoInput.setCustomerId(34);


        UpdateReportDto updateReport = restTemplate.postForObject(url,
                orderDtoInput, UpdateReportDto.class, new Object[] {});
        }

интересная часть моей конфигурации:

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <property name="messageConverters">
        <list>
            <ref bean="formHttpMessageConverter" />
            <ref bean="marshallingHttpMessageConverter" />
        </list>
    </property>
</bean>

<bean id="formHttpMessageConverter" class="org.springframework.http.converter.FormHttpMessageConverter">
</bean>

Я понимаю, что FormHttpMessageConverter преобразует в и из MultiValueMap и приложение типа медиа /х-WWW-форм-urlencoded.

Есть ли какая-нибудь магия или инструменты, которые я могу использовать или подключить для преобразования моего Dto в MultiValueMap ???или мне нужно перебрать свойства объекта и построить свой собственный MultiValueMap в моем тесте?

мой сервер ожидает получения параметров POST, которые выглядят примерно так:

id=11752&firstName=Joe&active=true&address1=1122&address2=2233&c
ellPhone=123-321-1234&childrensName1=bobby1&childrensName2=bobby2&childrensName3=bobby3&childrensName4=bobby4&city=someCity&
customHobbies=loves To Fly Planes&distributorId=407&email=doc@surgeon.com&fax=321-123-1234&fellowship=good fellows&fishing=false&golf=true&hunting=false&
insuranceCompany1=ins1&insuranceCompany2=ins2&insuranceCompany3=ins3&insuranceCompany4=ins4&lastName=Brownie&
mailMerge=true&medicalSchool=Granada U&officeDays=4&officeManager=manager&officeManagerPhone=456.654.4567&other=true&
paNurse=nurse 1&paNursePhone=345-543-3456&
phone=234-432-2345&
salesRepresentativeId=1935&specialty=meatball surgery&spouseName=Betty&state=AL&
surgeryDays=22&title=doc&version=2&zip=47474
promptValues[0].id=12&promptValues[0].miscPromptId=882&promptValues[0].value=meFirst&
promptValues[1].id=13&promptValues[1].miscPromptId=881&promptValues[1].value=youToo&residency=Jamaica General&
surgeonClinics[0].address1=newAddress&surgeonClinics[0].address2=newAddress2&surgeonClinics[0].city=clinic  City&
surgeonClinics[0].email=email@clinic1.com&surgeonClinics[0].fax=123.456.7890&surgeonClinics[0].id=33273&
surgeonClinics[0].name=clinic name&surgeonClinics[0].phone=890-098-4567&
surgeonClinics[0].zip=34567&surgeonClinics[0].surgeryCenter1=MySurgeryCenter1&
surgeonClinics[0].surgeryCenter2=MySurgeryCenter2&
surgeonClinics[1].address1=newAddress11&surgeonClinics[1].address2=newAddress22&surgeonClinics[1].city=clinic2 City&
surgeonClinics[1].email=email@clinic2.com&surgeonClinics[1].fax=123.456.7890&surgeonClinics[1].id=33274&
surgeonClinics[1].name=clinic2 name&surgeonClinics[1].phone=890-098-4567&
surgeonClinics[1].zip=34567&
surgeonClinics[1].surgeryCenter1=MySurgeryCenter21&surgeonClinics[1].surgeryCenter2=MySurgeryCenter22&

Вот что я не получаю: наш метод RestServiceController знает, как взять этот безумный список параметров и пере-создать наш объект Dto.Мы можем успешно назвать это используя curl.Кажется, что на стороне клиента должна существовать некоторая взаимная магия, чтобы превратить Dto в список параметров.
Вот подпись метода контроллера на стороне сервера:

// createOrder
    @RequestMapping(method = { RequestMethod.POST, RequestMethod.PUT }, value = "/orders/")
    @ResponseBody
    public UpdateReportDto createOrder(OrderDto orderDto,
            HttpServletRequest httpServletRequest,
            HttpServletResponse httpServletResponse) {

1 Ответ

0 голосов
/ 17 декабря 2015

Вы можете использовать RestTemplate с конвертерами сообщений.Я проверил это, и он работает

            RestTemplate restTemplate = new RestTemplate();
            List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
            messageConverters.add(new MappingJackson2HttpMessageConverter());
            restTemplate.setMessageConverters(messageConverters);

            restTemplate.postForEntity(url, requestBodyObject, returnTypeClass);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...