User REST API의 설계부분에서,
GET /users
GET /users/{id}
즉, User Resource에서 GET method 관련 기능을 만들고, 정리해보겠다.
@RestController
public class UserResource {
private UserDaoService service;
@Autowired
public UserResource(UserDaoService service) {
super();
this.service = service;
}
// GET /users
@GetMapping("/users")
public List<User> retrieveAllUsers() {
return service.findAll();
}
}
@RestController
어노테이션 추가@RestController
public class UserResource {
private UserDaoService service;
@Autowired
public UserResource(UserDaoService service) {
super();
this.service = service;
}
// GET /users
@GetMapping("/users")
public List<User> retrieveAllUsers() {
return service.findAll();
}
// GET /users/{id} -> 추가
@GetMapping("/users/{id}")
public User retrieveOneUser(@PathVariable("id") int id) {
return service.findOne(id);
}
}
이때, UserDaoService에서 정의된 findOne 메서드는 다음과 같이, 자바 함수형 프로그래밍을 이용한 코드이다.
public User findOne(int id) {
Predicate<? super User> predicate = user -> user.getId().equals(id);
return users.stream().filter(predicate).findFirst().get();
}
// stream() 메서드를 호출하여, users 리스트를 -> 스트림으로 변환
// filter() 메서드를 사용하여, 스트림을 통과하는 각 원소에 대해 주어전 조건(predicate)를 만족하는지 확인
// findFirst() 메서드는 조건을 만족하는 첫번째 원소를 찾으면, 그 원소를 반환하는 반환하는 Optional 객체로 감싸서 반환한다.
// findOne메서드의 리턴값은 User이기 때문에, get()메서드를 호출해, Optional 타입으로부터 실제 값을 얻어내야 한다!
GET localhost:8080/users 실행결과
GET localhost:8080/users/1 실행결과
GET localhost:8080/users/3 실행결과
모두 성공했다!
REST API의 의도, 명확성, 그리고 클라이언트와 서버 간의 올바른 의사소통을 위해, 지켜야한다. REST API 설계원칙을 지키는 것!
이 시리즈는 Udemy 강의의 내용을 정리한 것입니다.
https://www.udemy.com/course/spring-boot-and-spring-framework-korean/