java

Json 응답시 Null값을 ""으로 자동으로 바꾸기.

무세1 2017. 6. 21. 10:54

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;

    }

}