2013-06-29 85 views
2

Bleow是必须通过使用Spring Rest模板转换为对象的json。Spring RestTemplate的JSON反序列化问题

{"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) 

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

+0

你的'Registration'类是什么样的? –

回答

0

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

API documentation告诉您如何为该方法设置参数格式。您应该确保要发布的格式正确的JSON(我推荐使用Java对象,序列化,使用杰克逊是这样的:

+0

我可以发送请求使用postForObject方法服务,“userinput”是请求对象,“ServiceUrl是实际的URL”,但问题是当响应包含指定的对象列表时在示例中,JSON不是反序列化到Object中。注意:如果响应不包含对象列表,则反序列化。 – user2533804

0

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