How to annotate enum fields for deserialization using Jackson json

前端 未结 6 1059
一个人的身影
一个人的身影 2020-12-02 19:59

I am using REST web service/Apache Wink with Jackson 1.6.2. How do I annotate an enum field so that Jackson deserializes it?

Inner class

public enum          


        
6条回答
  •  误落风尘
    2020-12-02 20:44

    public enum BooleanField
    {
        BOOLEAN_TRUE("1"),      
        BOOLEAN_FALSE("0");
        
        private final String value;
    
        BooleanField( int value ) { this.value = value; }
        
    }
    

    Deserializer

    import com.fasterxml.jackson.core.JsonParser;
    import com.fasterxml.jackson.core.ObjectCodec;
    import com.fasterxml.jackson.databind.DeserializationContext;
    import com.fasterxml.jackson.databind.JsonDeserializer;
    import com.fasterxml.jackson.databind.JsonNode;
    
    public class BooleanFieldDeserializer extends Json Deserializer {
        
        public BooleanField deserialize( JsonParser p, DeserializationContext ctx )
        throws IOException 
        {
            // boilerplate code for every deserializer
            ObjectCodec objectCodec = p.getCodec();
            JsonNode node = objectCodec.readTree(p);
    
            // customizable part for your impl
            String booleanFieldString = node.asText();
            return valueOf( booleanFieldString ); <- Enum-supplied method
        }
    

    Then, in your JavaBean...

    @JsonDeserialize(using = BooleanFieldDeserializer.class)
    BooleanField locked;
    

提交回复
热议问题