Programming/Java

jackson - ObjectMapper 정리 [계속..]

쑤기c 2021. 7. 23. 10:44

배경: jackson 1.9 이하 버전에서 필요해짐.

출처: 직렬화&역직렬화


public class Coordinates {
    byte red;

    @JsonProperty("r")
    public byte getR() {
      return red;
    }

    @JsonProperty("red")
    public void setRed(byte red) {
      this.red = red;
    }
}
///////
Coordinates obj = new Coordinates();
obj.setRed((byte) 5);

ObjectMapper mapper = new ObjectMapper();
System.out.println("Serialization: " + mapper.writeValueAsString(obj));

Coordinates r = mapper.readValue("{\"red\":25}",Coordinates.class);
System.out.println("Deserialization: " + r.getR());

///////결과:
Serialization: {"r":5}
Deserialization: 25


public static Map<String, Object> objectToMap(Object obj) {
	ObjectMapper objectMapper = new ObjectMapper();
//	objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
//	objectMapper.configure(Feature.AUTO_DETECT_FIELDS, true);
	
    // value=null일때 처리
	objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
		@Override
		public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
			jgen.writeString("");
		}
	});
	
    // key=null일때 처리
	objectMapper.getSerializerProvider().setNullKeySerializer(new JsonSerializer<Object>() {
		  @Override
		  public void serialize(Object value, JsonGenerator jgen, SerializerProvider serializers) throws IOException, JsonProcessingException {
			  jgen.writeFieldName("null");
		  }
	});
	
	@SuppressWarnings("unchecked")
	Map<String, Object> map = objectMapper.convertValue(obj, Map.class);
	return map;
}


 

반응형