개발강의정리/Spring

[스프링 데이터 JPA] 3-11. 스프링 데이터 Common: Web 3부: Pageable 과 Sort 매개변수

nineDeveloper 2019. 11. 23.
728x90

스프링 데이터 JPA

3. 스프링 데이터 Common

본격적인 스프링 데이터 JPA 활용법을 학습하기에 앞서, ORM과 JPA에 대한 이론적인 배경을 학습합니다

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringlecture/spring-data-jpa-study/tree/chap03-11-03_common_pageable_sort

해당 포스팅 참고 인프런 강의

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%8D%B0%EC%9D%B4%ED%84%B0-jpa/dashboard

실습 환경

  • Java Version: Java 11
  • SpringBoot Version: 2.1.2.RELEASE

11. 스프링 데이터 Common: Web 3부: Pageable 과 Sort 매개변수

스프링 MVC HandlerMethodArgumentResolver

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/method/support/HandlerMethodArgumentResolver.html

스프링 MVC 핸들러 메소드의 매개변수로 받을 수 있는 객체를 확장하고 싶을 때 사용하는 인터페이스
추가로 스프링 데이터 JPAWeb 지원기능을 사용하면 PageableSort도 매개변수로 사용할 수 있음
 

페이징과 정렬 관련 매개변수

  • page: 0부터 시작.
  • size: 기본값 20.
  • sort: property,property,(ASC|DESC)
  • 예) sort=created,desc&sort=title (asc가 기본값)

실습

매개변수를 Pageable로 받아서 Page로 리턴하는 API 추가

@RestController
public class PostController {

    @Autowired
    private PostRepository posts;

    @GetMapping("/posts")
    public Page<Post> getPosts(Pageable pageable) {
        return posts.findAll(pageable);
    }
}

테스트 코드

파라메터로 페이정보를 넘기고 응답받는 테스트

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class PostControllerTest {

    @Autowired
    MockMvc mockMvc;

    @Autowired
    PostRepository postRepository;

    @Test
    public void getPosts() throws Exception {

        Post post = new Post();
        post.setTitle("jpa");
        postRepository.save(post);

        mockMvc.perform(get("/posts")
                    .param("page", "0")
                    .param("size", "10")
                    .param("sort", "created,desc")
                    .param("sort", "title"))
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.content[0].title", is("jpa")));
    }
}


728x90

댓글

💲 추천 글