스프링 데이터 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…?
- 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(,ASC DESC) - 예) 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")));
}