2013-01-23 55 views
6

Tôi đang sử dụng RestTemplate và có vấn đề deserializing một đối tượng. Đây là những gì tôi đang làm. Câu trả lời JSON có vẻ như,Deserializing đối tượng lồng nhau bằng cách sử dụng RestTemplate

{ 
"response": { 
"Time": "Wed 2013.01.23 at 03:35:25 PM UTC", 
"Total_Input_Records": 5, 
},- 
"message": "Succeeded", 
"code": "200" 
} 

Chuyển Đổi tải trọng Json này thành một POJO sử dụng jsonschema2pojo

public class MyClass { 
    @JsonProperty("response") 
    private Response response; 
    @JsonProperty("message") 
    private Object message; 
    @JsonProperty("code") 
    private Object code; 
    private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 
    //bunch of getters and setters here 
} 
public class Response { 
    @JsonProperty("Time") 
    private Date Time; 
    @JsonProperty("Total_Input_Records") 
    private Object Total_Input_Records; 
    private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 
//bunch of getters and setters here 
} 

Đây là quá trình xử lý yêu cầu nơi tôi đang nhận được ngoại lệ,

String url = "http://my.site.com/someparams"; 
RestTemplate template = new RestTemplate(
       new HttpComponentsClientHttpRequestFactory()); 
FormHttpMessageConverter converter = new FormHttpMessageConverter(); 
List<MediaType> mediaTypes = new ArrayList<MediaType>(); 
mediaTypes.add(new MediaType("application", "x-www-form-urlencoded")); 
converter.setSupportedMediaTypes(mediaTypes); 
template.getMessageConverters().add(converter); 
MyClass upload = template.postForObject(url, null, MyClass.class); 

Đây là phần bực bội, ngoại lệ (cố ý cắt, không đầy). Bất cứ điều gì tôi đang mất tích?

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unrecognized field "Time" (Class com.temp.pointtests.Response), not marked as ignorable 
at [Source: [email protected]; line: 1, column: 22 (through reference chain: com.temp.pointtests.MyClass["response"]->com.temp.pointtests.Response["Time"]);] 

+++++ Cập nhật Giải Quyết ++++++

tôi thấy mùa xuân thêm MappingJackson2HttpMessageConverter trong đó sử dụng Jackson 2. Bởi vì MappingJacksonHttpMessageConverter trong mã của tôi trên sử dụng các phiên bản Jackson Pre2.0 và nó không hoạt động. Nó hoạt động cho Jackson 2.0 tuy nhiên. Với MappingJackson2HttpMessageConverter có sẵn bây giờ, bây giờ tôi có thể thêm nó vào RestTemplate của tôi và mọi thứ hoạt động tốt :-). Đây là mã cho những người có cùng một vấn đề,

String url = "http://mysite.com/someparams"; 
RestTemplate template = new RestTemplate(); 
HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 
HttpEntity request = new HttpEntity(headers); 
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); 
MappingJackson2HttpMessageConverter map = new MappingJackson2HttpMessageConverter(); 
messageConverters.add(map); 
messageConverters.add(new FormHttpMessageConverter()); 
template.setMessageConverters(messageConverters); 
MyClass msg = template.postForObject(url, request, MyClass.class); 
+0

bạn nên trả lời câu hỏi của riêng bạn bằng "Cập nhật chỉnh sửa" của câu hỏi. – hectorg87

Trả lời

0

Sử dụng các chú thích của org.codehaus.jackson.map @JsonSerialize (sử dụng = JsonDateSerializer.class) hoặc @JsonDeserialize (sử dụng = JsonDateDeSerializer.class). JsonDeserializer; nó sẽ giải quyết vấn đề hoặc người dùng ObjectMapper (org.codehaus.jackson.map.ObjectMapper) để chuyển đổi thành chuỗi Json.

objectMapper.writeValueAsString (Object); // điều này sẽ cung cấp cho chuỗi json

Các vấn đề liên quan