Spring DI를 통해 컨트롤러에서 Jackson ObjectMapper를 얻는다. 스프링이 등록된 객체(Bean == ObjectMapper)를 관리하고 있고, 생성자에 명시하면 받아서 사용할 수 있다. 사용=의존성/의존관계를 주입 받는다(Dependency Injection).
Jackson ObjectMapper를 써서 DTO를 JSON 포맷의 String으로 변환한다. JsonProcessingException 예외가 발생할 수 있는데, 여기서는 간단히 JacksonException 예외로 간단히 쓰겠다.
우리가 Jackson을 바로 쓸 수 있는 건 Spring Boot가 Jackson을 지원하기 때문. 변환 또한 Spring Boot가 알아서 해주기 때문에 실제로는 아주 쉽고 자연스럽게 쓸 수 있다.
데이터를 전달하는 POST에서도 마찬가지로 Jackson ObjectMapper를 쓸 수 있다. 여기선 잘 전달됐는지 바로 확인하기 위해 DTO를 그대로 응답으로 활용해 보자.
여기서도 Spring Boot가 자동으로 변환하는 걸 써보자.
CRUD 모두 이런 식으로 DTO를 활용할 수 있다. 이때 적절한 요청 또는 응답을 처리하도록 DTO를 세분화해도 좋다. 예를 들어, Create(POST)에선 id를 직접 넘겨주지 않는다는 걸 명확히 드러낼 수도 있다.
-> 세분화 하여 DTO 를 사용한다는 것은 관리 포인트가 많아진다는 것을 의미한다. 신중하자..
public class PostController {
private final ObjectMapper objectMapper;
public PostController(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
@GetMapping("/{id}")
public String detail(@PathVariable String id) throws JacksonException {
PostDto postDto = new PostDto(id, "제목", "내용");
return objectMapper.writeValueAsString(postDto);
}
dependencies {
//Jackson 이 내장되어 있다.
implementation 'org.springframework.boot:spring-boot-starter-web'
}
@GetMapping("/{id}")
public PostDto detail(@PathVariable String id) throws JacksonException {
PostDto postDto = new PostDto(id, "제목", "내용");
return postDto;
}