
예전에는
JSON데이터 타입보다x-www-form-urlencoded데이터 타입을 주로 사용
x-www-form-urlencoded 데이터 형식:
?userId=euiyeon0519&userName=박의연&title=의연&content=최고
이런식으로 데이터를 완전 풀어서 표현을 해 전송해야 하므로 한계가 있음❗
📂 PostController.java
x-www-form-urlencoded 형태의 데이터를 서버로 요청@RequestParam을 사용 @PostMapping("/posts")
public String post(@RequestParam String title, @RequestParam String content){
// System.out.println("title = " + title);
// System.out.println("content = " + content);
// ✅ println()대신 Lombok의 @Slf4j를 사용
log.info("title={}, content={]", title, content);
return "Hello World";
}
📂 PostControllerTest.java
@Test
@DisplayName("/posts로 POST 요청")
void postTestURL() throws Exception {
// expected
mockMvc.perform(MockMvcRequestBuilders.post("/posts")
// application/x-www.form-urlencoded
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.param("title", "글 제목입니다.")
.param("content", "글 내용입니다.")
)
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("Hello World"))
.andDo(MockMvcResultHandlers.print());
}
}
JSON 데이터 형식:
{
"title": "제목",
"content": "내용",
"user": {
"id": : "유저 아이디",
"name": "유저 이름"
}
}
그에 비해JSON은 위와 같이 표현 가능✅
특히 user의 경우, 새로운 객체를 만들면 되기 때문에
데이터를 온전하게 표현할 수 있다는 장점이 있고
클래스로 표현하기에도 용이함
📂 PostController.java
JSON형태의 요청 데이터를 PostCreate 라는 클래스 객체에 매핑해서 받음 @PostMapping("/posts")
public String post(@RequestBody PostCreate params){
log.info("title={}, content={}", parmas.getTitle(), params.getContent());
return "Hello World";
}
📂 PostControllerTest.java
@Test
@DisplayName("/posts로 POST 요청")
void postTestJSON() throws Exception {
// expected
PostCreate request = PostCreate.builder()
.title("제목입니당")
.content("내용입니당")
.build();
mockMvc.perform(MockMvcRequestBuilders.post("/euiyeonlog/posts")
.contentType(APPLICATION_JSON)
.content("{\"title\" : \"제목입니다\", \"content\" : \"내용입니다\"}")
)
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("Hello World"))
.andDo(MockMvcResultHandlers.print());
}
GET 요청이나, x-wwww-form-urlencoded 타입의 POST 요청에 사용@RequestParam은 JSON 데이터 처리에 적합하지 않음❌POST, PUT, PATCH 요청에서 JSON, XML 데이터를 처리