2013-06-29 7 views
2

Bleow - это json, который должен быть преобразован в объект, используя шаблон Spring Rest.Проблема десериализации JSON с Spring RestTemplate

{"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" 
     } 
    ] 
}} 

Проблема здесь, когда список элементов для валидацииErrors являются частью ответа.

Ниже приведена конфигурация шаблона пружинного отдыха.

<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

Как выглядит ваш класс 'Регистрация'? –

ответ

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-адрес также действителен.