NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    Java Java Spring에서 Jackson ObjectMapper 사용하기.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 자바 스프링 프로젝트에서 JSONObject 또는 JSONArray를 사용해도 되지만, 아무래도 기능적인면이나 모델 매핑하는 부분에서 설정해야 할것들이 많다보니 Jackson을 사용하는게 편리합니다. 그래들 기준 Jackson을 추가하는 방법입니다. 아래 사이트로 이동하시고요.

    [ MVN Repository ]

     

    jackson을 검색해보세요. Jackson Databind 라이브러리를 선택하세요. 디펜던시는 자동으로 처리되므로 필요한 모든 라이브러리를 설치할 필요는 없습니다.

    wVUqJvJ.png

     

     

    버전은 가장 최신 버전으로 설치하는게 좋을거 같지만~ 꼭 그렇지는 않습니다. 아직 검증되지 않았을수도 있고 알려지지 않은 버그가 있을수도 있거든요. 그래서, 이미 많은 개발자 또는 회사에서 사용되는 버전을 설치하는게 좋습니다. 그런데, Jackson처럼 POJO를 Json 형식에 맞게 포멧팅만 해주는 간단한 것들은 사실 크게 문제가 되지는 않습니다. 그래서, 저는 최신 버전으로 설치했습니다.

    rgazQ6Z.png

     

     

    프로젝트가 그래들이라서 아래와 같이 그래들 탭을 선택하고 내용을 복사 해줍니다.

    WpVrSj7.png

     

     

    Visual Studio Codebuild.gradle 파일을 열고, dependencies에 붙여넣기 해줍니다. 저장 후 build.gradle 파일에서 우클릭하면 Reload Project가 보일겁니다. 클릭해서 실행하세요. 그러면, 그래들이 자동으로 Jackson 라이브러리들을 설치합니다. IntelliJ에서는 아마 Reload Gradle일겁니다. IDE마다 약간 다릅니다.

    dependencies {
    	compileOnly 'org.projectlombok:lombok'
    	developmentOnly 'org.springframework.boot:spring-boot-devtools'
    	runtimeOnly 'org.postgresql:postgresql'
    	annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    	annotationProcessor 'org.projectlombok:lombok'
    	testImplementation 'org.springframework.boot:spring-boot-starter-test'
    	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    	implementation 'org.springframework.boot:spring-boot-starter-web'
    	implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.2'
        implementation 'com.github.miwurster:spring-data-influxdb:1.8'
        implementation 'org.influxdb:influxdb-java:2.17'
    	implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.14.2'
    }

     

    참고로, InfluxDB의 date는 instant 타입입니다. 만약, 여러분의 DTO에 instant 타입의 속성이 있다면, Jackson이 Json으로 시리얼라이즈 할 때 에러가 발생할 수 있습니다. 이 문제를 해결하려면 아래와 같이 jackson-datatype-jsr310을 추가로 설치해야 합니다.

    implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.14.2'

     

    콘트롤러에서 아래와 같이 코드를 변경하세요.

    	@GetMapping(path="/pump_data")
    	public @ResponseBody String pumpData() throws JsonProcessingException {
            List<PumpModel> result = pumpService.pumpData();
    		ObjectMapper objectMapper = new ObjectMapper();
    		JavaTimeModule module = new JavaTimeModule();
    		objectMapper.registerModule(module);
    		return objectMapper.writeValueAsString(result);
    	}

     

    instant 타입을 처리할 때 필요한건 아래 2줄입니다.

    		JavaTimeModule module = new JavaTimeModule();
    		objectMapper.registerModule(module);

     

    그리고, 형식을 만들려면 아래와 같이 모델에 Jackson 어노테이션을 지정하세요.

    @Data
    @Measurement(name = "soccer")
    public class PumpModel {
        @Column(name = "age")
    	private String age;
    	@Column(name = "city")
    	private String city;
    	@Column(name = "name")
    	private String name;
        @Column(name = "team")
    	private String team;
    	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC")
    	@Column(name = "time")
    	private Instant time;
    }

     

    참고로, Milliseconds까지 표시하려면 아래와 같이 패턴을 설정하면 됩니다.

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss[.SSS]", timezone = "UTC")

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.