2014-05-15 2 views
0

RESTful 응용 프로그램에서 응답이 JSON 문자열로 Extjs에서 java로 전달되는 응용 프로그램이므로 잭슨을 사용하여 Java POJO로 비 직렬화합니다.잭슨을 사용하여 인스턴스를 비 직렬화 할 수 없습니다

POJO하는 변환
class FilterParams { 

    @JsonProperty(value = "type") 
    private String type; 

    /** The value. */ 
    @JsonProperty(value = "value") 
    private String value; 

    /** The group name. */ 
    @JsonProperty(value = "field") 
    private String field; 
} 

코드

mapper.readValue(json, FilterParams.Class); 

이하로 사용하고 그러나 여전히 무엇입니까 :

{ 
    "filter": "[{"type":"string","value":"sdadsadsa","field":"groupName"}]", 
    "limit": 10 
} 

FilterParams 클래스는 다음과 같습니다 : 아래

내 요청입니다 " FilterParams의 인스턴스를 deserialize 할 수 없습니다. ". 그것을 pojo로 변환하는 방법.

도움을 주시면 감사하겠습니다. 감사.

+0

'FilterParams'와'limit'라는 숫자 값? 그것은 당신이'mapper.readValue (json,? .class);에서 deserialize 할 필요가있는 클래스입니다. FilterParams 클래스에 매핑되는 json의 유일한 부분은'{ "type": "string", "value" : "sdadsadsa", "field": "groupName"}' –

답변

1
  1. JSON이 유효하지 않습니다. filter의 값은 JSON 배열 인 경우 "으로 시작하면 안되며 인 경우 내선 "으로 이스케이프 처리해야합니다.
  2. 귀하의 FilterParams 클래스는 전혀 JSON의 데이터를 반영하지 않습니다 그것은 limitint 특성과 array 또는 type, valuefield 특성을 가진 Filter
  3. 그런
  4. 당신이해야 Filter 클래스의 Collection을 가져야한다
1

귀하의 JSON에는 필터 & 필터의 두 가지 요소가 포함되어있어 Jackson이이 JSON String을 FilterParams 객체에 일치시킬 수 없습니다.

이 제한 다루는 JSON 부분을 무시하려면 다음을 수행하십시오

의 목록이 무엇 클래스
JsonNode tree = mapper.readTree(<JSON_STRING>); 
FilterParams fp = mapper.treeToValue(tree.get("filter"), FilterParams.class); 
관련 문제