스프링 데이터 Common 12. 웹 기능 2부 DomainClassConverter - KwangtaekJung/inflearn-spring-data-jpa-keesun GitHub Wiki
- 스프링 Converter
- Formatter도 들어 본 것 같은데...
<=포멧터는 string<->객체 간 변환만 가능하다.
기본적으로 스프링 웹 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"));
}
}