我有一个Spring MVC Rest Controller,它只是添加了一个客户记录。我的休息服务传递JSON并且当我从Web客户端或像Soap-UI这样的测试床调用它时工作正常。但是,当我尝试使用RestTemplate进行POST时,我得到一个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与我在Soap-UI中使用的测试JSON相同。在对代码进行了调整后,看起来它将我的JSON视为一个字符串而杰克逊试图转换整个事物,因为它无法找到一个辅助字段(当然它不能)。
我想我需要知道如何将JSON传递给我的RestTemplate,以便以正确的JSON格式获取请求。我花了整个上午试图找到一个例子,但在任何地方都找不到。
非常感谢您的帮助。
答案 0 :(得分:1)
至少有一个问题,最后一个参数应该是响应类
Registration output = restTemplate.postForObject(BASE_URL, request, Registration.class);
答案 1 :(得分:0)
这是我发布json的方式:
CustomerObject object = template.postForObject(
BASE_URL, request, CustomerObject.class);
Customer Object类必须包含字段:firstName,lastName ...