2015-08-05 2 views
0

Я интегрирую сторонний REST API. Я написал pojo для данного json. Форма 3-й партии я получаю ответ в виде JSON какЧто должно быть POJO для данного JSON

"custom_fields": { 
      "Field_68092": { 
       "type": "char", 
       "required": true, 
       "value": "1", 
       "label": "orderId" 
      } 
     } 

Я пытался со следующими POJO

public class Field_68092 { 
    private String type; 
    private String value; 
    private String label; 
    private boolean required; 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

    public String getLabel() { 
     return label; 
    } 

    public void setLabel(String label) { 
     this.label = label; 
    } 

    public boolean isRequired() { 
     return required; 
    } 

    public void setRequired(boolean required) { 
     this.required = required; 
    } 
} 

и POJO обычай подал является

public class Custom_fields { 
    private Field_68092 Field_68092; 

    public Field_68092 getField_68092() { 
     return Field_68092; 
    } 

    public void setField_68092(Field_68092 field_68092) { 
     Field_68092 = field_68092; 
    } 
} 

Field_68092 каждый раз, когда приходит нуль. может ли кто-нибудь помочь мне найти ut, что не так с структурой POJO?

ответ

1

Я думаю, что нет ничего плохого в вашем POJO. Пожалуйста, попробуйте с этим JSON

{"field_68092":{"value":"1","type":"char","label":"orderId","required":true}} 
+0

Я использую 3rd Party REST API, так что я не имею прав на изменение структуры JSon. – nand

+0

Вы можете создать простой проект java в затмениях и добавить библиотеку Jackson для тестирования JSON. – Albin

0

Если вы используете Джексон, вы должны использовать дополнительные аннотацию

@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) 
public class Field_68092 { 

И custom_fields это не имя класса - это имя поля внутри другого класса

проверить, все работает плавно

Вид оплаты:

import com.fasterxml.jackson.annotation.JsonTypeInfo; 

@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) 
public class Payment { 
    private Field_68092 custom_fields; 

    public Field_68092 getCustom_fields() { 
     return custom_fields; 
    } 

    public void setCustom_fields(Field_68092 custom_fields) { 
     this.custom_fields = custom_fields; 
    } 
} 

Field_68092 класса

import com.fasterxml.jackson.annotation.JsonTypeInfo; 

@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) 
    public class Field_68092 { 
    private String type; 
    private String value; 
    private String label; 
    private boolean required; 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

    public String getLabel() { 
     return label; 
    } 

    public void setLabel(String label) { 
     this.label = label; 
    } 

    public boolean isRequired() { 
     return required; 
    } 

    public void setRequired(boolean required) { 
     this.required = required; 
    } 
} 

Простой тест:

import com.fasterxml.jackson.databind.ObjectMapper; 
import java.io.StringWriter; 

public class Main { 

    public static void main(String[] args) throws Exception{ 
     Payment p = new Payment(); 
     Field_68092 f = new Field_68092(); 
     f.setLabel("label"); 
     f.setRequired(false); 
     f.setType("type"); 
     f.setValue("value"); 
     p.setCustom_fields(f); 

     ObjectMapper m = new ObjectMapper(); 
     StringWriter w = new StringWriter(); 
     m.writer().writeValue(w, p); 
     System.out.println(w.getBuffer()); 
     String json = "{\"Payment\":{\"custom_fields\":{\"Field_68092\":{\"type\":\"type\",\"value\":\"value\",\"label\":\"label\",\"required\":false}}}}"; 
     Payment p2 = m.readValue(json, Payment.class); 
     System.out.println(p2.getCustom_fields()); 
    } 
} 
+0

эта аннотация не работает. custom_fields находится внутри платежа другого класса. Я помещаю custom_fields внутри платежа. Есть ли другой способ устроить их? – nand

+0

Какую версию Джексона вы используете? У меня есть 2.4.1 – sibnick

+0

org.codehaus.jackson ДЖЕКСОНА-jaxrs 1.9.8 эта зависимость я определил в моем pom.xml – nand

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