728x90
반응형
SMALL
ObjectMapper는 정말 많이 사용되는데, 이 ObjectMapper를 사용할 때 writeValueAsString(Object value) 같은 경우에 IOException을 던지기 때문에 클라이언트 코드에서 처리하기 여간 귀찮은 게 아니다.
그래서 IOException 받아서 내가 만든 커스텀 에러 객체 (예를 들면, MapperToJsonException 이런 클래스? 아니면 그냥 RuntimeException)를 던져서 예외 공통 처리를 하는 방식으로 모듈화하면 개발 생산성이 높아지는 느낌이 든다.
물론, 이게 정답은 아니지만 워낙 ObjectMapper는 많이 사용되고 그 중에서도 객체를 Json으로 변환하는 작업은 더더욱 많이 사용되고 그때마다 예외 처리하기가 너무너무 귀찮다. 그래서 난 아예 빈으로 등록할 때 설정 작업을 해주었다.
CommonConfiguration
package kr.osci.kapproval.com.config;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
@Configuration
public class CommonConfiguration {
@Bean
public ObjectMapper objectMapper() {
return new CustomObjectMapper();
}
public static class CustomObjectMapper extends ObjectMapper {
@Override
public String writeValueAsString(Object value) {
try {
return super.writeValueAsString(value);
} catch (IOException e) {
throw new RuntimeException("value: " + value + " 를 JSON으로 직렬화 중 오류가 발생했습니다. ", e);
}
}
}
}
이렇게 빈으로 등록해서 어디선가 ObjectMapper를 주입받아 사용할 일이 있다면 편리하게 사용중이다.
만약, 그 외 설정이 필요한 경우가 있을 수 있는데 그럴때도 난 이렇게 사용하고 설정을 더 추가해준다 아래처럼.
CommonConfiguration
package kr.osci.kapproval.com.config;
import com.sun.xml.internal.ws.developer.SerializationFeature;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.PropertyNamingStrategy;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
public class CommonConfiguration {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new CustomObjectMapper();
mapper.configure(SerializationConfig.Feature.WRITE_ENUMS_USING_TO_STRING, true);
mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
return mapper;
}
public static class CustomObjectMapper extends ObjectMapper {
@Override
public String writeValueAsString(Object value) {
try {
return super.writeValueAsString(value);
} catch (IOException e) {
throw new RuntimeException("value: " + value + " 를 JSON으로 직렬화 중 오류가 발생했습니다. ", e);
}
}
}
}
여튼 이렇게 잘 사용중이다! 내가 안 까먹기 위해 작성했다.
728x90
반응형
LIST
'Spring, Apache, Java' 카테고리의 다른 글
로깅에 대하여2 - Logback MDC (2) | 2024.09.04 |
---|---|
로깅에 대하여 (0) | 2024.07.11 |
[프로덕션 준비] 모니터링 Part.3 커스텀 메트릭 등록하기 (0) | 2024.07.04 |
[프로덕션 준비] 모니터링 Part.2 마이크로미터, 그라파나, 프로메테우스 (0) | 2024.07.02 |
[프로덕션 준비] 모니터링 Part.1 Actuator 사용하기 (0) | 2024.06.30 |