728x90
입력 JSON
{
"products" : [
{
"name" : "computer",
"price" : 20000
},
{
"name" : "book",
"price" : 9900
}
],
"name" : "ychoi",
"age": 23,
}
다음과 같은 list가 포함되어있는 json포맷이 데이터를 받아야할 일이 생겼습니다.
jackson을 사용해서 객체로 받아보겠습니다.
pom.xml
//생략
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>5.2.2.RELEASE</spring.version>
<jackson2.version>2.10.2</jackson2.version>
</properties>
//생략
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson2.version}</version>
</dependency>
//생략
pom.xml 파일입니다.
Spring 버전은 5.2.2 이며, jackson 라이브러리 버전은 2.10.2 입니다..
jackson-databind을 사용하면 JSON콘텐츠를 Java객체로 손쉽게 맵핑할 수 있습니다.
javadoc.io/doc/com.fasterxml.jackson.core/jackson-databind/2.10.2/index.html
VO(Value Object)
package kr.or.connect.reservation.vo;
import java.util.List;
public class UserVo {
private String name;
private int age;
private List<ProductVo> products;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<Product> getProducts() {
return products;
}
@Override
public String toString() {
return "UserVo [name=" + name + ", age=" + age + ", products=" + products + "]";
}
}
UserVo 객체를 만들어 줍니다. 기존에 만들어져 있는 DTO나 Entitiy객체를 사용해도 됩니다.
name과 age, 그리고 리스트 형태의 ProdutVo 객체가 있습니다.
package kr.or.connect.reservation.vo;
public class ProductVo {
private String name;
private int price;
public String getName() {
return name;
}
public int getPrice() {
return price;
}
@Override
public String toString() {
return "Product [name=" + name + ", price=" + price + "]";
}
}
ProductVo객체를 만들어 줍니다. Name과 Price를 가지고 있습니다.
Controller
package kr.or.connect.reservation.controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import kr.or.connect.reservation.vo.ProductVo;
import kr.or.connect.reservation.vo.UserVo;
@RestController
@RequestMapping("/api/test")
public class MainController {
@PostMapping
public UserVo testApilist(@RequestBody UserVo uservo) {
System.out.println(uservo.toString());
for (ProductVo product : uservo.getProducts()) {
System.out.println(product.toString());
}
return uservo;
}
}
테스트
Controller에서 UserVo객체를 반환했을때, List형태로 응답하는 것 또한 볼 수 있습니다.
println으로 UserVo객체와 ProductVo객체를 살펴보면 jackson에 의해 객체로 맵핑되어 있는 것을 볼 수 있습니다.
728x90
'웹 프레임워크 > Spring' 카테고리의 다른 글
Spring 현재 날짜를 기준으로 업로드 폴더 생성 및 업로드 (1) | 2021.01.26 |
---|---|
프로젝트 D. Spring Security를 이용한 로그인하기 및 예약 관련 web API 만들기 - 코드 리뷰 및 회고(웹 백엔드) (0) | 2021.01.25 |
Spring Controller에서 json으로 Date format 객체 받기, 응답 (0) | 2021.01.16 |
프로젝트C. 메인, 상세보기 관련 web API 만들기 코드 리뷰 및 회고 (boostcourse 웹 백엔드) (0) | 2021.01.11 |
프로젝트B. 방명록 만들기 코드 리뷰 및 회고 (boostcourse 웹 백엔드) (0) | 2020.12.24 |