JSON Serialization
Custom Serializing Enumeration
import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.ser.std.StdSerializer; import com.taogen.demo.modules.task.enumeration.NameValueEnum;
  import java.io.IOException;
 
 
 
  public class NameValueEnumSerializer extends StdSerializer<NameValueEnum> {
      protected NameValueEnumSerializer() {         super(NameValueEnum.class);     }
      protected NameValueEnumSerializer(Class t) {         super(t);     }
      @Override     public void serialize(NameValueEnum nameValueEnum, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {         jsonGenerator.writeStartObject();         jsonGenerator.writeFieldName("name");         jsonGenerator.writeString(nameValueEnum.getName());         jsonGenerator.writeFieldName("value");         jsonGenerator.writeString(nameValueEnum.getValue());         jsonGenerator.writeEndObject();     } }
   | 
 
public interface NameValueEnum {
      public String getName();
      public void setName(String name);
      public String getValue();
      public void setValue(String value); }
  | 
 
@JsonSerialize(using = NameValueEnumSerializer.class) public enum TaskPriority implements NameValueEnum {     EMERGENCY("emergency", "紧急"),     HIGH("high", "高"),     GENERAL("general", "普通"),     LOW("low", "低")     ;
      private String name;
      private String value;      	@Override     @JsonValue     public String getName() {         return name;     }
      @Override     public void setName(String name) {         this.name = name;     }
      @Override     public String getValue() {         return value;     }
      @Override     public void setValue(String value) {         this.value = value;     } }
   | 
 
public class Task extends BaseEntity {     private TaskPriority priority; }
  | 
 
JSON Deserialization
Deserializing Comma Separated String to List
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer;
  import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors;
  public class CommaSeparatedStrToListJsonDeserializer         extends JsonDeserializer<List<String>> {
      @Override     public List<String> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {         if ("{specifiedField}".equals(jsonParser.currentName())) {             String fieldStr = jsonParser.getValueAsString();             if (fieldStr != null && !fieldStr.trim().isEmpty()) {                 return Arrays.stream(fieldStr.split(",")).collect(Collectors.toList());             }         }         return null;     } }
   | 
 
@JsonDeserialize(using = CommaSeparatedStrToListJsonDeserializer.class) private List<String> {specifiedField};
   | 
 
Deserializing JSON Array to String
public class JsonArrayToStringDeserializer extends JsonDeserializer<String> {     @Override     public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {        if (jsonParser.currentToken() == JsonToken.START_ARRAY) {            List<String> list = new ArrayList<>();            jsonParser.nextToken();
             while (jsonParser.hasCurrentToken() && jsonParser.currentToken() != JsonToken.END_ARRAY) {               list.add(jsonParser.getValueAsString());               jsonParser.nextToken();            }           return String.join(",", list);        }        return null;     } }
  | 
 
@JsonDeserialize(using = JsonArrayToStringDeserializer.class) private String {specifiedField};
   | 
 
References
[1] How To Serialize and Deserialize Enums with Jackson