Programming/Spring Data JPA

스프링 데이터 Common - Web (스프링 데이터 JPA - 6)

흠냐아뤼 2021. 1. 1. 15:47
728x90

 

1. 스프링 Converter

 

- PostController.java

@RestController
public class PostController {

    @Autowired
    PostRepository postRepository;

    @GetMapping("/posts/{id}")
    public String getPost(@PathVariable Long id) {
        Optional<Post> byId = postRepository.findById(id);
        Post post = byId.get();
        return post.getTitle();
    }
}

 

@RestController
public class PostController {

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

 

 

2. Pageable, Sort 매개변수

 

- PostController.java

@RestController
public class PostController {

    @Autowired
    PostRepository postRepository;

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

 

- test

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

    @Autowired
    MockMvc mockMvc;

    @Autowired
    PostRepository postRepository;

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

        mockMvc.perform(get("/posts/" + post.getId()))
                .andDo(print())
                .andExpect(status().isOk());
    }

    @Test
    public void getPosts() throws Exception {
        Post post = new Post();
        post.setTitle("hongchan");
        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());
    }

}

 

 

3. HATEOAS

리소스와 관련된 링크를 함께 제공

 

1) 의존성 추가

 <dependency>
 	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-hateoas</artifactId>
 </dependency>

 

2) 핸들러 매개변수로 PagedResourcesAssembler 추가

@RestController
public class PostController {

    @Autowired
    PostRepository postRepository;

    @GetMapping("/posts")
    public PagedModel<EntityModel<Post>> getPosts(Pageable pageable, PagedResourcesAssembler<Post> assembler) {
        return assembler.toModel(postRepository.findAll(pageable));
    }
}

 

728x90