Spring RestTemplate的JSON反序列化问题

时间:2013-06-29 02:44:04

标签: spring resttemplate

Bleow是json,必须使用Spring Rest Template转换为对象。

{"userResponse": {
   "build": 1,
   "code": 400,
   "status": "Failed",
   "validationErrors":    [
            {
         "fieldName": "userId",
         "message": "User Id is NOT in valid format"
      },
            {
         "fieldName": "password",
         "message": "Password cannot be less than 8 characters"
      }
   ]
}}

当validationErrors的元素列表是响应的一部分时,问题出在此处。

以下是弹簧支架模板配置。

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

下面是调用postForObject的代码。

restTemplate.postForObject( "ServiceUrl", "userinput", Registration.class );

以下是调用服务时抛出的错误。

org.springframework.web.client.HttpClientErrorException: 400 Bad Request
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:90)
    at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:494)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:451)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:409)

请提供一些意见以解决问题。

2 个答案:

答案 0 :(得分:0)

您的“userinput”需要是JSON格式的字符串,而不是,因此您尝试联系的服务可能会回复“错误请求”,因为您没有发送有效的JSON。

API documentation告诉您如何格式化该方法的参数。你应该确保你发布了一个格式正确的JSON(我建议使用一个java对象,并使用Jackson这样序列化它:

ObjectMapper mapper = new ObjectMapper();
ObjectWriter normalWriter = mapper.writer();
String jsonString = normalWriter.writeValueAsString(objectToMakeJson);

答案 1 :(得分:0)

如前所述,"userinput"应该是有效的JSON(例如{"userinput" : {"dataKey" : "dataValue"}})。此外,不清楚"ServiceUrl"是否是您提供的代码段中实际网址的占位符,请确保该网址也有效。