2013-06-29 6 views
2

Bleow는 Spring Rest Template을 사용하여 객체로 변환해야하는 json입니다.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" 
     } 
    ] 
}} 

여기 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

'등록'클래스는 무엇입니까? –

답변

0

"사용자 입력"은 JSON 형식의 문자열이어야하며 그렇지 않습니다. 따라서 유효한 JSON을 전송하지 않아서 연락하려는 서비스가 "잘못된 요청"으로 회신하고있는 것일 수 있습니다.

API documentation은 해당 방법의 매개 변수 형식을 어떻게 지정해야하는지 알려줍니다. 당신은 당신이 올바른 형식의 JSON을 게시하고 있는지 (나는 자바 객체를 사용하고 직렬화 권하고 싶습니다해야 그 같은 잭슨을 사용하여 :.

+0

요청을 보낼 수 있습니까? postForObject 메서드를 사용하여 서비스 할 때 "userinput"은 요청 개체입니다. "ServiceUrl은 실제 URL입니다."그러나 문제는 응답에 지정된대로 개체 목록이 포함되어있는 경우입니다. JSON 샘플에서 Object로 deserialize하지 않습니다. 주 : 응답에 객체 목록이 포함되어 있지 않으면 비 직렬화입니다. – user2533804

0

으로 언급 당신의 "userinput" 유효한 JSON을해야한다 (예를 들어 {"userinput" : {"dataKey" : "dataValue"}}) . "ServiceUrl"이 제공된 스 니펫에있는 실제 URL의 자리 표시 자인지 여부도 명확하지 않습니다.