[스프링 부트] 커스텀 Object Mapper

2024. 7. 9. 00:01·Springboot

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
'Springboot' 카테고리의 다른 글
  • [스프링 부트] Exception Handler
  • [스프링 부트] Api 공통 spec
  • [스프링 부트] 멀티 모듈 Bean 등록
  • [스프링 부트] 자바 파일에서 스프링 부트 세팅
코딩 못하는 감자
코딩 못하는 감자
  • 코딩 못하는 감자
    코딩 못하는 감자의 기록
    코딩 못하는 감자
  • 전체
    오늘
    어제
    • 분류 전체보기 (91)
      • Kubernetes (10)
      • Github Action (1)
      • Docker, Container (3)
      • Springboot (26)
      • Baekjoon (4)
      • 명품 운영체제 (9)
      • 데이터베이스 (2)
      • JSP (3)
      • 안드로이드프로그래밍 (1)
      • 미니프로젝트 (1)
      • 용어정리 (0)
      • 소프트웨어공학 (3)
      • 운영체제 (2)
      • Flutter (0)
      • Git (1)
      • HTTP (0)
      • RAG (1)
      • Database (2)
      • FastAPI (1)
      • Elasticsearch (7)
      • Redis (0)
      • JPA (5)
      • Linux (1)
      • MCP (1)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SpringBoot
    elasticsearch analyzer
    엘라스틱서치 인덱스
    응답 로그
    엘라스틱서치 인덱스 복사
    elasticsearch ngram
    fuzziness
    elasticsearch 커스텀분석기
    mcp #model context protocol #claude desktop #mcp claude연동 #claude 파일 시스템 연동
    Dockerfile
  • hELLO· Designed By정상우.v4.10.3
코딩 못하는 감자
[스프링 부트] 커스텀 Object Mapper
상단으로

티스토리툴바