2016-01-14 52 views
2

我是一個POJO類AttributeJsonDeserialzerJsonNode對象?

public class AttributeDeserializer extends JsonDeserializer<Attribute> { 

     @Override 
     public Attribute deserialize(JsonParser jp, DeserializationContext ctxt) 
      throws IOException, JsonProcessingException { 

      JsonNode node = jp.getCodec().readTree(jp); 

      String name = node.get("name").asText(); 

      //String value = node.get("value").asText(); 

      Attribute attr = new Attribute(); 
      attr.setName(name); 
      attr.setValue(value); 

      return attr; 
     } 

Attribute類有兩個變量namevalue其中名稱是String類型和價值類型Object

我知道使用

node.get("name").asText() 

擺脫JsonNode的字符串值,但值是Object類型也可以是一個列表,字符串或任何東西。

我該如何在解串器中創建Attribute對象?

屬性類:

public class Attribute { 

    protected String name; 
    protected Object value; 

    public String getName() { 
     return name; 
    } 
    public void setName(String value) { 
     this.name = value; 
    } 

    public Object getValue() { 
     return value; 
    } 
    public void setValue(Object value) { 
     this.value = value; 
    } 

} 
+0

可能是這樣回答先前提出的問題可以幫助你http://stackoverflow.com/a/28384407/ 827204 – Srikanta

+0

爲什麼要實現解串器?爲什麼不讓傑克遜的默認? –

+0

@UriShalit:我正在更改名稱屬性的值,雖然它沒有在上面的代碼中提供 –

回答

0

我解決了它這樣的:

public class AttributeDeserializer extends JsonDeserializer<Attribute> { 

     @Override 
     public Attribute deserialize(JsonParser jp, DeserializationContext ctxt) 
      throws IOException, JsonProcessingException { 

      JsonNode node = jp.getCodec().readTree(jp); 

      String longName = getLongName(node.get("name").asText()); 
      System.out.println("Translated name: " + name); 

      ObjectMapper objMapper = new ObjectMapper(); 

      ObjectNode o = (ObjectNode)node; 
      o.put("name", name); 

      Attribute attr = objMapper.convertValue(o, Attribute.class); 

      return attr; 
     } 
    } 
+2

唯一的問題是,如果反序列化的對象也具有特殊的反序列化行爲,您將錯過它們,因爲您使用的是新的'ObjectMapper' - 這可以解決在類似的問題http://stackoverflow.com/questions/18313323/how-do-i-call-the-default-deserializer-from-a-custom-deserializer-in-jackson –