스프링 데이터 JPA-14.DomainClassConverter, Pageable과 Sort 매개변수(스프링 데이터 Common:Web)


스프링 데이터 Common: Web 2부: DomainClassConverter

스프링 Converter

  • https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/convert/converter/Converter.html
  • Formatter…?
  1. ToId컨버터 : 받아서 ID로 String 타입인데 자동으로 Long형으로 받음
    @RestController
    public class PostController {
    
     @Autowired
     private PostRepository postRepository;
    
     @GetMapping("/posts/{id}")
     public String getPost(@PathVariable Long id){
         Optional<Post> byId = postRepository.findById(id);
         Post post = byId.get();
         return post.getTitle();
     }
    }
    

2.ToEntity컨버터 : Id 받아서 엔티티로 (레포지토리를 활용해서 findById를 한다. 1과 동일하게 작동.)

    @GetMapping("/posts/{id}")
    public String getPost(@PathVariable("id") Post post){
        return post.getTitle();
    }

테스트

@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test") // application.test.properties
class PostControllerTest {

    @Autowired
    MockMvc mockMvc;

    @Autowired
    PostRepository postRepository;

    @Test
    public void getPost() throws Exception{
        Post post = new Post();
        post.setTitle("jpa");
        postRepository.save(post);

        mockMvc.perform(get("/posts/1"))
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(content().string("jpa"));
    }
}

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

스프링 MVC HandlerMethodArgumentResolver

  • 스프링 MVC 핸들러 메소드의 매개변수로 받을 수 있는 객체를 확장하고 싶을 때 사용하는 인터페이스
  • https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/method/support/HandlerMethodArgumentResolver.html

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

  • page: 0부터 시작.
  • size: 기본값 20.
  • sort: property,property(,ASCDESC)
  • 예) sort=created,desc&sort=title (asc가 기본값)
    @GetMapping("/posts")
    public Page<Post> getPosts(Pageable pageable){
        return postRepository.findAll(pageable);
    }
    @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")));
    }





© 2019. by jaeuk