Java
JsonView Null to Empty String
Spring에서 JsonView 사용 시 공통으로 null인 필드를 empty string으로 리턴해야 할 필요가 있는 경우가 있습니다. 이런 경우 ObjectMapper를 상속받은 Custom ObjectMapper를 이용한 HttpMessageConverter를 통해 해결할 수 있습니다. 1.NullSerializer 구현
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 NullSerializer extends JsonSerializer<Object> { @Override public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { jsonGenerator.writeString(""); } } |
2.CustomObjectMapper 구현
1 2 3 4 5 6 7 8 9 10 |
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider; public class CustomObjectMapper extends ObjectMapper { public CustomObjectMapper() { DefaultSerializerProvider.Impl sp = new DefaultSerializerProvider.Impl(); sp.setNullValueSerializer(new NullSerializer()); this.setSerializerProvider(sp); } } |
3.HttpMessageConverter 추가
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
@Bean public MappingJackson2HttpMessageConverter converter() { CustomObjectMapper com = new CustomObjectMapper(); MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(com); return converter; } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(converter()); super.configureMessageConverters(converters); } public class JsonViewResolver implements ViewResolver { @Override public View resolveViewName(String viewName, Locale locale) throws Exception { MappingJackson2JsonView view = new MappingJackson2JsonView(); return view; } } |