Json 데이터에서 Object로
Object객체에서 Json 데이터로 변환해주는 역할을 중앙에서 Object Mapper가 해주는데,
이를 커스텀하여 변환 과정을 설정할 수 있다. (설정이 없는 경우 default mapper)
package org.delivery.api.config.objectmapper;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ObjectMapperConfig { // 커스텀 오브젝트 매퍼
// Bean 정의가 안되어 있으면 spring에서 디폴트로 만든다.
@Bean // ObjectMapper 객체 빈 등록 , 빈의 이름은 메소드 이름을 따라간다
public ObjectMapper objectMapper() {
var objectMapper = new ObjectMapper();
objectMapper.registerModule(new Jdk8Module()); // jdk 8버전 이후 클래스 파싱, Serialize, diserialize
objectMapper.registerModule(new JavaTimeModule()); // local date Series 해당
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 모르는 json field 에 대해서 무시한다.
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
// 비어있는 빈을 설정할 때
//날짜 관련 직렬화
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.setPropertyNamingStrategy(new PropertyNamingStrategies.SnakeCaseStrategy());
return objectMapper;
}
}
사진은 없지만 default mapper로 object 객체를 json으로 변환하여 리턴한 결과
카멜케이스로 리턴하게 되었다.
하지만 상황에 따라 스네이크 케이스를 변환할 경우가 생기는데.
이때 Response 객체에 JsonNaming 어노테이션을 붙여 수정할 수도 있지만
Response 객체의 수가 많은 경우 모든 로직을 수정하는데 어려움이 있다.
따라서 위 코드와 같이 ObjectMapper를 커스텀하여 Bean에다 등록하여 사용한다.
'Springboot' 카테고리의 다른 글
[스프링 부트] Exception Handler (0) | 2024.07.10 |
---|---|
[스프링 부트] Api 공통 spec (0) | 2024.07.10 |
[스프링 부트] 멀티 모듈 Bean 등록 (0) | 2024.07.08 |
[스프링 부트] 자바 파일에서 스프링 부트 세팅 (0) | 2024.07.08 |
[스프링 부트] Converter, CRUD 추상화 (0) | 2024.07.05 |