2015-10-09 3 views
-1

Я использую Джексон 2.6.x Я не может преобразовать JSON в Java классаДжексон: Json имея JSon массива класса Java, имеющего список другого класса Java

public class ParentTest { 
@JsonProperty("ParentTest") 
public List<Test> getTestList() { 
    return testList; 
} 

public void setTestList(List<Test> testList) { 
    this.testList = testList; 
} 

@JsonProperty("ParentTest") 
List<Test> testList; 

public ParentTest(List<Test> testList) 
{ 
    this.testList = testList; 
} 

public ParentTest() 
{ 
    super(); 
    testList = new ArrayList<Test>(); 
} 

public String toString() 
{ 
    String r = ""; 
    if(testList!=null) 
    for(Test t : testList) 
    { 
     r += "Test:"+t.field1+t.field2; 
    } 
    else 
     r = "null"; 
    return r; 
}} 

и класс, используемый для списка

@JsonRootName("Test")public class Test { 
@JsonProperty("field1") 
String field1; 
@JsonProperty("field2") 
String field2; 
public Test(String field1,String field2) 
{ 

    this.field1 = field1; 

    this.field2 = field2; 
} 
public String getField1() { 
    return field1; 
} 
public void setField1(String field1) { 
    this.field1 = field1; 
} 
public String getField2() { 
    return field2; 
} 
public void setField2(String field2) { 
    this.field2 = field2; 
}} 

И мой Json является

{"ParentTest": [{ 
"Test":{ 
     "field1":"t1", 
     "field2":"t2" 
     } 
}, 
{ 
"Test":{ 
     "field1":"t3", 
     "field2":"t4" 
     } 
}]} 

И читать его я использовал

public final class HandlerJacksonUtils { 
private static ObjectMapper m = new ObjectMapper(); 
private static JsonFactory jf = new JsonFactory(); 

    public static <T> Object fromJson(String jsonAsString, Class<T> pojoClass) throws IOException { 
     m.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
     return m.readValue(jsonAsString, pojoClass); 
    }} 

, а затем

ParentTest pt = (ParentTest) HandlerJacksonUtils.fromJson(json, ParentTest.class); 

ParentTest объект пт ничего не выводит на System.out.print (pt.toString);

+0

вы пробовали задав конструктор для класса ParentTest с @JSonCreator эту заметку? – jstuartmilne

+0

Ваш тестовый пример не подходит для меня с неподходящим конструктором класса 'Test'. –

ответ

0

@JsonRootName не работает отдельно, как указано в javadocs. Вы должны использовать его в сочетании с SerializationFeature#WRAP_ROOT_VALUE и/или DeserializationFeature#UNWRAP_ROOT_VALUE. Но он работает только для корневого объекта, который вы хотите сериализовать/десериализовать. Таким образом, это не будет работать в вашем случае. Вместо этого, вы можете сделать класс-оболочку для Test

public class TestWrapper { 

    @JsonProperty("Test") 
    private Test test; 

    public Test getTest() { 
     return test; 
    } 

    public void setTest(Test test) { 
     this.test = test; 
    } 
} 

И использовать его вместо Test в ParentTest

Смежные вопросы