티스토리 뷰
# 1
Interface UserRepository 속에 내장되어 있는 findall() 메소드를 활용해서 List<user> 배열에 담아 출력해보도록 하겠다.
@GetMapping
@GetMapping("/dummy/users/")
public List<User> list(){
return userRepository.findAll();
{
# 1 - 1 (JSONView)
Json 데이터를 Select 하기 전에 Json 데이터를 한눈에 보기 편하게 만들어주는 Chrome 확장 프로그램인 JSONView를 다운받으면 좋다!
Chrome 웹 스토어
Chrome에 사용할 유용한 앱, 게임, 확장 프로그램 및 테마를 찾아보세요.
chrome.google.com
# 2
JSONView 까지 다운이 완료되면 Select 된 데이터를 살펴보도록 하겠다.
findall() 메소드를 이용해서 모든 데이터를 select 하는 것은 성공적이고, 그렇다면 id값을 매칭해서 select 하는 것은 어떻게 할까?
# 3
@GetMapping("dummy/user/{id}")
public User detail(@PathVariable int id){
}
{id} 값으로 GetMapping 하고 @Pathvariable 어노테이션을 활용해서 id 값과 매칭해서 select 해보려고 하는데, 여기서 한가지 문제점이 발견된다 분명 현재 DB에 존재하고 있는 id값이 1,2,3 밖에 없으니 혹시 id 값을 4로 매핑하면 오류가 뜰 것이 분명하다.
그러면 우리는 어떻게 해야될까?
Optional 값으로 User 객체를 감싸서 데이터가 들어오고 있으니 우리가 Null 값인지 아닌지를 판별해서 return 해야 한다.
1. userRepositoy.findById(id)를 통해서 id 값으로 매핑되는 모든 데이터들을 불러온다.
2. null 값이 존재하지 않는다면 userRepository.findById(id).get()을 통해서 데이터을 불러오면 되지만 현재는 null값을 생각해야 되므로 userRepository.findById(id).orElseThrow을 활용해서 null값 예외처리를 해준다.
여기까지 내용을 코드로 살펴보면
@GetMapping("dummy/user/{id}"}
public User detail(@PathVariable int id){
userRepository.findById(id).orElseThrow()
}
이렇게 까지 진행됐으면 이제 저 데이터값을 받을 객체 값과, orElseThrow()에서 예외처리를 해보자.
Supplier에 존재하는 get() 메소드를 사용해서 <IllegalArgumentException> 예외 처리를 해주도록 하겠다.
이렇게 코드를 구성하면 id값이 있으면 select가 되고, 예외가 발생하면 id값이 return 되게 해줬다.
@GetMapping("dummy/user/{id}")
public User detail(@PathVariable int id) {
User user = userRepository.findById(id).orElseThrow(new Supplier<IllegalArgumentException>() {
@Override
public IllegalArgumentException get() {
// TODO Auto-generated method stub
return new IllegalArgumentException("해당 유저는 없습니다. id : " + id);
}
});
return user;
}
# 4
전체 Select, ID값으로 매핑하여 Select를 성공적으로 작업했으니 한 페이지에 나오는 데이터를 조절할 수 있는 페이지를 조절 해 볼 것이다.
@PageableDefault 어노테이션을 사용하면 Spring boot에서 쉽게 페이징 처리 해줄 수 있다. 어노테이션 내부에 size, sort, direction 값을 조절하여 적절하게 페이지를 처리해보겠다.
한 페이지당 2건의 데이터를 리턴 받을려고 적용해보겠다.
@GetMapping("dummy/user")
public List<User> pageList(@PageableDefault(size = 2, sort = "id", direction = Sort.Direction.DESC) Pageable pageable){
Page<User> pagingUser = userRepository.findAll(pageable);
List<User> users = pagingUser.getContent();
return users;
}
오늘은 id값으로 mapping해서 값을 select 해오는 작업을 해보고, 데이터들을 페이징 처리로 2개씩 나누어 보여질 수 있도록 코드를 구현해봤다. 오늘의 작업에선 어렵거나 이해가 안되는 것은 없었고, Spring boot의 쉬운 페이징 처리에 놀랍고 즐거웠다~
'JavaProject > Spring Boot' 카테고리의 다른 글
Spring Boot(로그인, 회원가입 페이지 생성, footer/header) (2) | 2022.09.14 |
---|---|
Spring Boot(JPA 영속성 컨텍스트, 더티 체킹, Update) (0) | 2022.09.12 |
Spring Boot(JPA dummy 데이터로 insert 테스트하기) (0) | 2022.09.09 |
Spring Boot(User Table 생성, MySQL) (0) | 2022.09.05 |
Spring Boot(lombok, bulider 패턴) (0) | 2022.08.31 |