ABOUT ME

컴퓨터 전공자의 개발 관련 블로그

Today
Yesterday
Total
  • 스프링 데이터 Common - Web (스프링 데이터 JPA - 6)
    Programming/Spring Data JPA 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

    댓글

Designed by Tistory.