작성글 저장
작성한 글을 저장하는 컨트롤러를 만들것이다. 복습겸 Http Method 종류부터 정리하고 넘어가자.
Http Method
GET, POST, PUT ,PATCH, DELETE, OPTIONS, HEAD, TRACE, CONNECT
위와 같은 9가지 종류가 있고 이 중 앞의 5가지를 주로 사용한다.
글 조회는 GET, 글 등록은 POST 로 한다.
초기 단계로 Hello 를 출력하는 컨트롤러부터 만들어보자.
우선 보낼 요청의 ContentType 을 생각해야하는데, 두가지 정도 생각해볼 수 있다.
- application/x-www-form-urlencoded
- application/json
두 방식의 차이점은 여기에 간략하게 정리해두었다. 여기서는 JSON 방식으로 보낼것이다.
PostController
데이터를 받는 DTO 객체 PostCreate 를 만들고 이 객체에 요청 데이터가 잘 받아지는지 확인해볼것이다.
이 테스트는 컨트롤러 통합 테스트이고 PostCreate 의 단위 테스트가 아니기 때문에
params 의 값은 로그를 찍어 확인해 본다.
@Slf4j
@RestController
public class PostController {
@PostMapping("/posts")
public String post(@RequestBody PostCreate params) {
log.info("params = {}", params.toString());
return "Hello";
}
}
PostCreate
public class PostCreate {
public String title;
public String content;
public PostCreate(String title, String content) {
this.title = title;
this.content = content;
}
@Override
public String toString() {
return "PostCreate{" +
"title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
}
PostControllerTest
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@WebMvcTest
class PostControllerTest {
@Autowired
private MockMvc mockMvc;
@DisplayName("/posts 요청 시 Hello 를 출력한다.")
@Test
void post() throws Exception {
mockMvc.perform(
post("/posts")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"title\" : \"글 제목입니다\", \"content\" : \"글 내용입니다 하하\"}")
)
.andExpect(status().isOk())
.andExpect(content().string("Hello"))
.andDo(print());
}
}
테스트는 성공하고 위 사진의 맨 윗줄의 params 에 값이 잘 담겼음을 확인할 수 있다.
참고자료 )
호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS) - 인프런 | 강의
단순히 애플리케이션 하나를 만드는데 끝나지 않습니다. Spring Boot를 활용한 백엔드부터 Vue.js 모던 프론트엔드 스택을 연동한 서비스 완성 A-Z를 보여드립니다., 🐯이제는 실전이다!🐯이 강의를
www.inflearn.com
'API 만들어 보기 > 게시판 API' 카테고리의 다른 글
[작성글 저장] 리팩토링 1 (0) | 2023.09.23 |
---|---|
[작성글 저장] 게시글 저장 구현 (1) | 2023.09.22 |
[데이터 검증] @ControllerAdvice (0) | 2023.09.22 |
[데이터 검증] BeanValidation (0) | 2023.09.21 |
[게시글 조회] 컨트롤러 Mock 테스트 1 (0) | 2023.09.21 |