Java Json Library Jacson Annotation 소개
web/Spring

Java Json Library Jacson Annotation 소개

반응형

restFul API를 만들다 보면, 어떤 항목을 serialize 제외하거나 null인 항목은 제외하거나 하는 작업이 필요로 할 때가 있다.

이를 Jackson 라이브러리의 Annotation을 사용하여 하는 방법을 확인해보자.

[Maven 셋팅]




1
2
3
4
5
6
7
8
9
10
11
<properties>
    <jackson.version>2.9.2</jackson.version>
</properties>
  
<dependencies>       
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
</dependencies>
cs




예제로 사용될 Student Dto 클래스이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.wedul.common.dto;
 
/**
 * 학생 DTO
 *
 * @class StudentDto.java
 * @author cjung
 * @since 2018. 4. 2.
 */
public class StudentDto {
    private String name;
    private String dept;
    private int age;
    
    public StudentDto() {}
    
    public StudentDto(String name, String dept, int age) {
        this.name = name;
        this.dept = dept;
        this.age = age; 
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getDept() {
        return dept;
    }
 
    public void setDept(String dept) {
        this.dept = dept;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
}
cs



그리고 요청을 받을 Controller 이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.wedul.common.controller;
 
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import com.wedul.common.dto.StudentDto;
 
@RestController
@RequestMapping(value = "/student")
public class StudentCtrl {
    
    /**
     * 학생 정보 얻기
     * 
     * @return
     */
    @PostMapping("/get")
    public ResponseEntity<?> getStudent() {
        return ResponseEntity.ok(new StudentDto("wedul""weduls"28)); 
    }
}
cs


/cjungproject/student/get url을 호출하여 결과를 확인해보면 다음과 같이 나온다.




이 기본적인 기능에서 추가적으로 제공되는 Jackson Library 기능을 확인해보자.


1. Serializer/Deserialize 시 제외시킬 프로퍼티를 지정
@JsonIgnoreProperties을 사용하여 제외시킬 프로퍼티를 설정할 수 있다.

[설정방법]
1
2
3
4
5
@JsonIgnoreProperties(value = {"name", "dept"})
public class StudentDto {
    private String name;
    private String dept;
    private int age;
cs



[결과]





2. 전달될 프로퍼티를 다른이름으로 전송
- @JsonProperty를 이용하여 다른 이름으로 전송이 가능하다.

[설정]
1
2
3
4
5
6
7
8
9
public class StudentDto {
    @JsonProperty("userName")
    private String name;
 
    @JsonProperty("userDept")
    private String dept;
    
    @JsonProperty("userAge")
    private int age;
cs



[결과]




3. 프로퍼티가 notNull 이거나 notEmpty일경우에만 반환되도록 설정

- @JsonInclude을 사용하면 프로퍼티가 null 이나 empty 상태일때 전송되지 않도록 지정할 수 있다.

[설정]


1
2
3
4
5
6
7
8
9
public class StudentDto {
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String name;
 
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private String dept;
    
    @JsonProperty("userAge")
    private int age;
cs



[결과]


위와 같이 전달할 경우. name과 dept가 null과 empty 상태이기 때문에 전송이 되지 않는것을 확인할 수 있습니다.





반응형