2

Bleow 是必须使用 Spring Rest Template 将其转换为对象的 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 的元素列表是响应的一部分时,问题就在这里。

下面是spring rest模板配置。

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

请提供一些输入来解决问题。

4

2 回答 2

0

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

于 2013-06-29T11:52:41.440 回答
0

您的“用户输入”必须是 JSON 格式的字符串,但不是,因此您尝试联系的服务可能会回复“错误请求”,因为您没有发送有效的 JSON。

API 文档告诉您需要如何格式化该方法的参数。您应该确保发布格式正确的 JSON(我建议使用 java 对象,并像这样使用 Jackson 对其进行序列化:

ObjectMapper mapper = new ObjectMapper();
ObjectWriter normalWriter = mapper.writer();
String jsonString = normalWriter.writeValueAsString(objectToMakeJson);
于 2013-06-29T08:41:31.173 回答