Spring에서 RestController를 이용해서 Json으로 응답을 주고 있는데, 모든 API에 대해서 Null값은 "" 으로 바꿔줘야 했다.


응닶값이 Null이면 제거해 주는 Annotation은 존재하지만 공백으로 바꿔주는 Annotation은 존재하지 않는다.

 @JsonInclude(Include.NON_NULL) -> Null을 제거해 주는 Annotation


그래서 몇가지 Custom을 통해서 해결이 가능하다.


JsonSerializer 클래스를 상속받아 serialize method를 override한다.

import com.fasterxml.jackson.core.JsonGenerator;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.JsonSerializer;

import com.fasterxml.jackson.databind.SerializerProvider;


import java.io.IOException;


public class NullToEmptyStringSerializer extends JsonSerializer<Object>{


    @Override

    public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {

        jsonGenerator.writeString("");

    }

}


그리고 ObjectMapper를 Custom한다.

import com.fasterxml.jackson.databind.ObjectMapper;


public class CustomObjectMapper extends ObjectMapper {


    private static final long serialVersionUID = 1L;


    public CustomObjectMapper(){

        getSerializerProvider().setNullValueSerializer(new NullToEmptyStringSerializer());

    }


}


Springboot를 이용하기 때문에 JavaConfig로 설정 하겠다.


그 이후에 MappingJackson2HttpMessageConverter 클래스에 CustumObjectMapper를 설정해 주면 된다.

@Configuration

public class JsonCustomConfigure {

    @Bean

    public MappingJackson2HttpMessageConverter converter() {

        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();

        CustomObjectMapper mapper = new CustomObjectMapper();

        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

        converter.setObjectMapper(mapper);

        return converter;

    }

}


'java' 카테고리의 다른 글

springboot 1.5.x 에서 springboot 2.0.x 넘어가면서 생긴일..  (0) 2018.03.12
Spring Filter 순서 설정.  (0) 2018.01.11
RestTemplate Urlcoding 삽질기..  (0) 2016.07.08
Spring RestTemplate timeout 설정  (0) 2016.05.30
log4j 설정  (0) 2016.04.06
Posted by 무세1
,