스프링 데이터 Common 12. 웹 기능 2부 DomainClassConverter - KwangtaekJung/inflearn-spring-data-jpa-keesun GitHub Wiki

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

기본적으로 스프링 웹 MVC의 웹 데이터 바인더가 string을 Long 타입으로 바인딩해줌.

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

참고) 생성자 주입
생성자가 1개이고 그 생성자가 받는 파라미터가 빈으로 등록되어 있으면 그 빈을 자동으로 주입해준다.
이때는 @Autowired를 생략해도 된다. @RequiredArgsConstructor + private final의 조합으로 코딩하면 편한다.

  • DomainClassConverter가 string을 Post의 id로 바인딩해준다.
    @GetMapping("/posts/{id}")
    public String getAPost(@PathVariable(“id”) Post post) { // 이때는 "id"라고 명시해줘야 함.
        return post.getTitle();
    }
  • @SpringBootTest
    • 단위테스트가 아닌 통합 테스트이다.
    • main의 application.properties의 설정을 사용함. 따라서 DB도 H2가 아닌 PostgreSQL을 사용한다.
    • test용을 별도로 설정하고 싶으면 @ActiveProfiles("test")로 별도 설정해서 사용한다. (test/application-test.properties)
    • 통합 테스트가 아닌 경우에는 기본적으로 H2 사용한다.
@SpringBootTest
@AutoConfigureMockMvc
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(MockMvcRequestBuilders.get("/posts/" + post.getId()))
                .andDo(MockMvcResultHandlers.print())
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().string("jpa"));
    }
}
⚠️ **GitHub.com Fallback** ⚠️