728x90
반응형
SMALL
Jackson Library
Spring 개발을 하다 보면, 컨트롤러 text/html 형식이 아닌 데이터 전달 목적으로 사용하고 싶을 때가 있다.
물론, plain/text 형식으로 보내도 상관은 없지만, 보통 데이터 구조를 표현하는 방식인 XML 또는 JSON 형태로 보낸다.
데이터의 구조를 표현하는 이유는 데이터 표현도 있지만, 사실상 데이터를 사용하는 대상이 편하게 사용하기 위해서다.
Jackson은 JSON 데이터 구조를 처리해주는 라이브러리입니다.
Gradle
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.2'
2.7 버전부터는 JDK 7 이상이 필요하며 JDK6을 지원하는 마지막 버전은 2.6.7.1이다.
ObjectMapper
ObjectMapper mapper = new ObjectMapper(); // create once, reuse
JSON 데이터를 Java Object로 변환
{
"name": "hoooon",
"age": 29
}
readValue
MyValue value = mapper.readValue(new File("data.json"), MyValue.class);
value = mapper.readValue(new URL("http://hoooon-s.com/api/test.json"), MyValue.class);
value = mapper.readValue("{\"name\":\"hoooon\", \"age\":29}", MyValue.class);
Java Object Convert to JSON
MyValue myResultObject = new MyValue();
myResultObject.name = "hoooon";
myResultObject.age= 29;
ObjectMapper mapper = new ObjectMapper();
// result.json 파일로 저장
mapper.writeValue(new File("result.json"), myResultObject);
byte[] jsonBytes = mapper.writeValueAsBytes(myResultObject);
String jsonString = mapper.writeValueAsString(myResultObject);
Jackson Library 없이, JSON 데이터 작성
Java 데이터 저장
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public static void main(String[] args) {
Person person = new Person("blog", 27);
}
}
JSON 데이터 작성
String JSON = "\"{"+
"\"name\": \"" + person.getName() + "\", "+
"\"job\": \"" + person.getJob() + "\""+
"}\"";
GSON, SimpleJSON
simpleJSON
JSONObject jsonObj = new JSONObject();
jsonObj.put("name", person.getName());
jsonObj.put("age", person.getAge());
String JSON = jsonObj.toString();
Jackson vs GSON, SimpleJSON
실제 라이브러리에 차이는 존재하지 않지만, Spring 3.0 이후부터, Jackson과 관련된 API를 제공함으로써 Jackson 라이브러리를 사용할 때 자동화 처리가 가능하게 되었다. 이러한 이유로 JSON을 선호한다.
JSON Annotation
- @JsonIgnoreProperties : JSON으로 변환 (Serialize, Deserialize) 시 제외시킬 속성을 지정, Class 위에 선언
- @JsonIgnore : 멤버 변수 위에 선언해서 제외 처리
- @JsonInclude : 값 존재 유무에 따라 Serialize 시 동작을 지정 (default = ALWAYS), Class 위에 선언
- @JsonInclude(JsonInclude.Include.ALWAYS) : 속성의 값에 의존하지 않고 항상 포함
- @JsonInclude(JsonInclude.Include.NON_EMPTY) : NULL 또는 빈 값이 아닌 경우 포함
- @JsonInclude(JsonInclude.Include.NON_NULL) : NULL이 아닌 경우 포함
- @JsonInclude(JsonInclude.Include.NON_DEFAULT) : Bean의 기본 생성자로 정의된 필드 값과 다르게 변경된 필드만 포함
- @JsonFormat : 날짜, 시간 값을 직렬화할 때 형식 지정
- @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss"
Reference
www.lesstif.com/java/java-json-library-jackson-24445183.html
728x90
반응형
LIST
'Develope > ETC' 카테고리의 다른 글
[객체 지향] SOLID 법칙 - 객체 지향 설계 5대 원리 (0) | 2022.08.12 |
---|---|
[Computer Science] 운영체제 (0) | 2022.08.09 |
[Deploy] Deploy & CI & CD 배포 관련 용어 정리 (0) | 2021.01.31 |
[JSON] Json이란 무엇인가? (0) | 2020.03.17 |
[WAS] Web Application Server? Web Server? NAS? (0) | 2020.03.17 |