[Spring JPA #17] 스프링 데이터 DomainClassConverter

| 스프링 데이터 DomainClassConverter

  • 스프링에서 Converter는 컨트롤러에 사용자 요청이 오게될 때, 요청값을 다른 타입으로 변환하여 컨트롤러의 메서드에 전달하는 역할을 하는 인터페이스를 의미합니다.
  • DomainClassConverter는 이 개념을 확장하여 어떤 사용자 요청에 대한 요청값을 도메인 클래스로 변환하여 컨트롤러의 메서드에 전달하는 Converter를 의미합니다.

| 스프링 데이터 DomainClassConverter 예제


프로젝트 구조

├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │   └── tutorial
│   │   │   └── springevent
│   │   │   ├── Application.java
│   │   │   ├── PostController.java
│   │   │   ├── Post.java
│   │   │   └── PostRepository.java
│   │   └── resources
│   │   └── application.properties
│   └── test
│   └── java
│   └── com
│   └── tutorial
│   └── springevent
│   └── PostControllerTest.java

의존성 관리

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

소스 코드

@SpringBootApplication
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Entity
@Data
public class Post {

@Id @GeneratedValue
private Long id;

private String title;

@Temporal(TemporalType.TIMESTAMP)
private Date created;
}
@RestController
public class PostController {

@Autowired
PostRepository postRepository;

@GetMapping("/posts/{id}")
public Post getPost(@PathVariable("id") Post post) {
return post;
}
}
  • /posts/{id}로 id를 매개변수로 받아서 메서드의 인자값으로 전달하는 것을 볼 수 있습니다. 이때 Post 도메인 클래스에 맞게 DomainClassConverter가 id 매개변수를 변환하여 Post 객체형태로 전달되게 됩니다. 
public interface PostRepository extends JpaRepository<Post, Long> {
}

테스트 코드

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

@Autowired
MockMvc mockMvc;

@Autowired
PostRepository postRepositry;

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

mockMvc.perform(get("/posts/" + post.getId()))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string(containsString("1")))
.andExpect(content().string(containsString("jpa")));

}
}


https://www.inflearn.com/course/스프링-데이터-jpa


이 글을 공유하기

댓글(0)

Designed by JB FACTORY