반응형
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을 호출하여 결과를 확인해보면 다음과 같이 나온다.
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를 이용하여 다른 이름으로 전송이 가능하다.
[설정]
3. 프로퍼티가 notNull 이거나 notEmpty일경우에만 반환되도록 설정
- @JsonInclude을 사용하면 프로퍼티가 null 이나 empty 상태일때 전송되지 않도록 지정할 수 있다.
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 |
[결과]
- @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 상태이기 때문에 전송이 되지 않는것을 확인할 수 있습니다.
반응형
'web > Spring' 카테고리의 다른 글
Tomcat에서 war 사이에 session 공유 (0) | 2018.05.27 |
---|---|
Spring Interceptor와 Filter에서 POST 방식으로 전달된 JSON 데이터 처리하기 (0) | 2018.05.27 |
스프링 DispatcherServlet 설정 방법 (0) | 2018.05.27 |
Spring Context 종류 및 특성 (0) | 2018.05.27 |
Spring Rest Client Feign 소개 (1) | 2018.05.27 |