Jackson dynamic property names

前端 未结 4 693
感动是毒
感动是毒 2020-11-27 16:46

I would like serialize an object such that one of the fields will be named differently based on the type of the field. For example:

public class Response {
          


        
4条回答
  •  不知归路
    2020-11-27 17:25

    my own solution.

    @Data
    @EqualsAndHashCode
    @ToString
    @JsonSerialize(using = ElementsListBean.CustomSerializer.class)
    public class ElementsListBean {
    
        public ElementsListBean()
        {
        }
    
        public ElementsListBean(final String fieldName, final List elements)
        {
            this.fieldName = fieldName;
            this.elements = elements;
        }
    
        private String fieldName;
    
        private List elements;
    
        public int length()
        {
            return (this.elements != null) ? this.elements.size() : 0;
        }
    
        private static class CustomSerializer extends JsonSerializer {
            public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException,
                    JsonProcessingException
            {
                if (value instanceof ElementsListBean) {
                    final ElementsListBean o = (ElementsListBean) value;
                    jgen.writeStartObject();
                    jgen.writeArrayFieldStart(o.getFieldName());
                    for (Object e : o.getElements()) {
                        jgen.writeObject(e);
                    }
                    jgen.writeEndArray();
                    jgen.writeNumberField("length", o.length());
                    jgen.writeEndObject();
                }
            }
        }
    }
    
        

    提交回复
    热议问题