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

2021. 3. 26. 00:49 Spring Data/Spring Data JPA

 

| 스프링 데이터 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



출처: https://engkimbs.tistory.com/829?category=772527 [새로비]