지난시간에 api를 만들어서 string데이터를 주고 받았다.
지난시간에도 말했듯이 오직 string만 주고 받는 일은 거의 없고 여러 데이터를 포함해서 보낸다.
예를들면 학생을 요청할때 학번, 이름, 학과등을 모아서 보내는 경우가 있다.
api는 서로 다른 언어끼리도 통신할 수 있는데 서로 객체를 표현하는 방식이 다르기 객체를 직접 보낼 수 없다.
객체를 문자열(json)로 바꿔서 전송하고 그 문자열을 객체로 바꿔서 수신한다.
여기서 객체와 문자열을 바꾸는 역할을 Object Mapper가 한다.
객체 -> Object Mapper -> json -> Object Mapper -> 객체
DTO
전송될 객체를 DTO로 나타낸다.
DTO는 Data Transfer Object의 약자이고 송신측과 수신측의 DTO클래스 명은 달라도 된다.
다만 속성은 같아야 한다.
데이터의 역할만 하기 때문에 클래스를 만들 때 속성만 있으면 되고 기본적인 getter, setter, toString메소드만 있으면 된다.
코틀린에서는 data 키워드를 통해 기본적으로 제공된다.
// dto/StudentDTO.java
public class StudentDTO {
int id;
String name;
// getter, setter, toString, Constructor...
}
// controller/ApiController.java
@GetMapping("student")
public StudentDTO getStudent(){
return new StudentDTO(1, "Alice");
}
이렇게 구현하고 요청을 보내면 json형식으로 나타난 객체를 볼 수 있다.
RequestBody
데이터를 받을 때 뿐만 아니라 요청할 때도 RequestBody에 json형식으로 객체를 보낼 수 있다.
주로 POST와 PUT메서드에서 사용된다.
// controller/ApiController.java
@PostMapping("student")
public StudentDTO createStudent(@RequestBody StudentDTO student){
System.out.println(student.toString());
return student;
}
RequestBody에 객체를 적고 송신하여 Spring서버에서 정상적으로 도달함을 알 수 있다.
만약 속성명을 잘못 보냈다면 받는 쪽에서 null값을 받게 된다.
'프로그래밍 > 스프링' 카테고리의 다른 글
[스프링] 6. 테스트코드 작성 (0) | 2022.08.02 |
---|---|
[스프링] 5. Lombok (0) | 2022.07.22 |
[스프링] 3. REST API 만들기 (0) | 2022.07.16 |
[스프링] 2. 첫 api 만들기 (0) | 2022.07.15 |
[스프링] 1. 스프링 시작하기 (0) | 2022.07.12 |