이전 글 까지, Service와 Repository를 만들어서 단위테스트까지 진행했다.
이번 글에서는 유저의 요청을 받아서 처리를 다루는 역할을 하는 Controller를 생성할 것이다.
@Controller : 뷰 반환
@Restcontroller : @Controller + @Responsebody로써, json이나 xml을 반환한다.
json 데이터를 객체로 받아오고, 객체를 json으로 내보내는데에 도움을 준다.
package com.test.admin.controller;
import com.test.admin.entity.User;
import com.test.admin.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequiredArgsConstructor
@RequestMapping("/users")
public class UserController {
private final UserService userService;
// json 데이터가 body로 넘어올텐데, User 객체로 받아오기 위해선 @RequestBody를 이용한다
@PostMapping("")
public String register(@RequestBody User newUser) {
return userService.register(newUser);
}
// id를 url에서 가져올 것이므로 @PathVariable을 사용해준다.
@GetMapping("/{id}")
public User find(@PathVariable String id) {
return userService.find(id);
}
@GetMapping("")
public List<User> findAll() {
return userService.findAll();
}
}
GetMapping, PostMapping보다 먼저 나온 것이 RequestMapping인데
RequestMapping을 이용해서 Method와 경로 또한 일일이 지정하다가, Method를 지정해주는 GetMapping 같은 것이 나온 것이다.
대신 이 RequestMapping 같은 것을 이용해서 위 처럼 공통된 경로를 지정해줄 수도 있다.
register 함수에, @RequestBody가 쓰였는데
RequestBody는 http 요청의 body 부분을 java 객체로 받을 수 있게 해주는 어노테이션으로, 주로 json을 받을 때 활용한다.
생성한 이 Controller를 테스트하기 위해서는 두 가지 방법이 있다.
1. RestClient 이용
2. 단위 테스트
우리는 이전 글에서 2번 단위 테스트를 진행해봤으므로, RestClient를 이용해서 직접 클라이언트가 되어서 테스트해본다.
RestClient Insomnia를 다운로드해준다. (RestClient 중에는 Postman도 있다)
다운로드를 완료했으면, 폴더를 추가한다.
UserController에 대한 api 요청들을 user폴더에 모두 넣어줄 것이다.
click to add first request를 눌러 request를 추가한다.
먼저 register()를 테스트해 볼 것이다.
request type은 JSON으로 둔다.
그리고 url을 지정하고, JSON 데이터를 맞춰서 요청해본다.
Send를 누르면
정상적으로 return값이 id값이 오게 된다.
register() 함수가 잘 동작했음을 알 수 있다.
이제는 find() 함수를 테스트해보자.
방금 생성하여 리턴받은 id를 인자로 해서,
localhost:8080/users/8adc41c5-9a5c-4b27-8802-1d89259ee189 로 넘겨주었다.
Send를 보내면 정상적으로 리턴받는 것을 확인할 수 있다.
이번에는 findAll() 함수를 테스트해보자.
이번에는 [] 배열 형식으로 리턴을 받은 것을 확인할 수 있다. 데이터를 여러개 집어넣게 되면, 여러개가 보인다는 것이다.
이렇게 총 생성했던 Request를 세개였고, 모두 테스트를 완료하였다.
이번 글에서는 RestClient인 Insomnia를 이용해서 테스트를 진행했는데,
Rest Client보다 단위테스트로 테스트 하는 것이 더 권장되고 더 효율적이다.
다음 글에서는 Controller를 단위테스트하는 법에 대해 정리한다.
참고
RestController vs Controller (https://velog.io/@woo00oo/RestController-vs-Controller)
RequestMapping (https://mungto.tistory.com/436)
'[SpringBoot]' 카테고리의 다른 글
RESTful 아키텍쳐 스타일 (0) | 2022.12.10 |
---|---|
DI (Dependency Injection) 3가지 (0) | 2022.12.10 |
SpringBoot 간단 실습 - 2 단위 테스트 (0) | 2022.12.09 |
@Autowired 의존성 주입이 안된다면 / NULL (0) | 2022.12.08 |
SpringBoot 간단 실습 - 1 엔티티 생성 / 서비스 생성 (0) | 2022.12.04 |