티스토리 뷰
1. Jackson은 Json과 xml을 자바 객체와 상호 변환해 주는 라이브러리이다.
1-1 내부적으로 자바 클래스의 setter/getter를 호출하여 값을 할당해 준다.
1-2 따라서 클래스 setter/getter를 반드시 작성해야 한다.
2. 라이브러리는 아래의 구문으로 추가할 수 있다.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
2-1 이 라이브러리를 사용하는 간단한 포스트이다.
2-1-1 아래 내용을 프로젝트 루트의 data/simple.json이라고 저장하고
{
"id": 14,
"firstName":"pilseong",
"lastName": "Heo",
"active": true,
"address": {
"street": "7 lucky seven street",
"city": "Seongnam",
"state": "Kyounggi",
"zip": 13258,
"country": "Korea"
},
"languages": ["Java", "JavaScript", "TypeScript"],
}
2-1-2 위 json을 받을 수 있는 POJO클래스를 작성한다.
package pe.pilseong.jacksontest;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
public class Student {
private int id;
private String firstName;
private String lastName;
private boolean active;
private Address address;
private String[] languages;
}
package pe.pilseong.jacksontest;
import lombok.Data;
@Data
public class Address {
private String street;
private String city;
private String state;
private int zip;
private String country;
}
2-1-3 아래는 실행할 메인 클래스이다.
2-1-3-1 jackson의 ObjectMapper를 받아와 json이 저장된 파일을 읽어와 Student객체로 변환한다.
2-1-3-2 중요한 점은 자바 클래스와 수신 받는 json 데이터가 완벽하게 매핑되어야 하는 점이다.
2-1-3-3 완벽하게 일치하지 않으면 에러가 발생한다.
package pe.pilseong.jacksontest;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import com.fasterxml.jackson.databind.ObjectMapper;
public class App {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
Student student = null;
try {
student = mapper.readValue(new File("data/sample.json"), Student.class);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Student Name :: " + student.getFirstName()+ " " +student.getLastName());
System.out.println("Is Avctive :: " + student.isActive());
System.out.println("Address :: " + student.getAddress());
System.out.println("Languages :: ");
Arrays.stream(student.getLanguages()).forEach(System.out::println);
}
}
2-1-3-4 결과는 다음과 같다.
Student Name :: pilseong Heo
Is Avctive :: true
Address :: Address(street=7 lucky seven street, city=Seongnam, state=Kyounggi, zip=13258, country=Korea)
Languages ::
Java
JavaScript
TypeScript
2-2 완벽하게 구조가 일치하지 않아도 받을 수 있는 방법이 있다.
2-2-1 아래 클래스처럼 클래스 선언 부분에 @JsonIgnoreProperties를 붙이고 ignoreUnknown을 true 설정한다.
2-2-2 이렇게 하면 data에는 있지만 클래스에서 속성이 정의되어 있지 않는 경우는 그 데이터를 무시한다.
package pe.pilseong.jacksontest;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class Student {
private int id;
private String firstName;
private String lastName;
private boolean active;
private Address address;
private String[] languages;
}
2-2-3 이 예제를 실행하기 위해서 데이터에 company 정보를 추가한다.
{
"id": 14,
"firstName":"pilseong",
"lastName": "Heo",
"active": true,
"address": {
"street": "7 lucky seven street",
"city": "Seongnam",
"state": "Kyounggi",
"zip": 13258,
"country": "Korea"
},
"languages": ["Java", "JavaScript", "TypeScript"],
"company": "Seoul Government"
}
2-2-3 이렇게 하면 실행 결과는 이전과 동일하게 나온다. @JsonIgnoreProperties가 없으면 에러가 발생한다.
3. 스프링 Rest Application은 Jackson data bind가 dependency에 있는 경우 자동으로 객체를 변환 해준다.
'Spring > Spring Basic' 카테고리의 다른 글
Spring Basic : H2 Database 신경 쓸 것들 (0) | 2020.06.26 |
---|---|
Spring Basic : ConcurrentModificationException 해결하기 (0) | 2020.06.11 |
Spring : Web MVC with Java Config 설정 - Static 파일 사용하기 (0) | 2020.05.20 |
Spring : Web MVC + Hibernate with XML Config - Search (0) | 2020.05.11 |
Spring : Web MVC + Hibernate with XML Config - Delete (0) | 2020.05.11 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- 하이버네이트
- 매핑
- form
- Angular
- mapping
- MYSQL
- login
- 설정
- Security
- one-to-many
- crud
- hibernate
- RestTemplate
- Validation
- 스프링
- Spring
- one-to-one
- Spring Security
- 자바
- XML
- spring boot
- Rest
- 외부파일
- 상속
- WebMvc
- 스프링부트
- 설정하기
- jsp
- 로그인
- Many-To-Many