HttpMessageConverters이란?
Spring MVC는 웹 애플리케이션에서 클라이언트로부터 오는 HTTP 요청을 처리하고, 해당 요청에 대한 응답을 생성하는 데 사용되는 웹 프레임워크로 HTTP 요청의 본문은 다양한 형식을 가질 수 있다. HttpMessageConverters는 이러한 본문을 객체로 변환하거나 객체를 본문으로 변환하는 역할을 담당한다.
@RestController
public class UserController {
// 1) @RestController을 사용할 경우 @ResponseBody 생략가능
// ex) public @ResponseBody User create(){} => public User create(){}
@PostMapping("/user")
public User create(@RequestBody User user) {
// 2) 요청의 본문에 데이터가 들어올 때 객체로 받고 싶으면 @RequestBody 사용
return user;
}
}
- @RestController가 아닌 @Controller를 사용할 경우 메서드는 @ResponseBody로 선언해야한다.
- @RequestBody : HTTP요청에 content-type이 json일 경우 json 메시지 컨버터를 사용해 json 메시지를 User 객체로 컨버팅을 해준다.
1. 사용 방법
1-1) 객체 생성
Json 요청 값과 바인딩할 객체를 정의한다. Java Bean 규약에 따라 getter, setter를 통해서 바인딩을 해준다.
package com.example.demo.user;
public class User {
private Long id;
private String username;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
1-2) Controller 생성
package com.example.demo.user;
import org.springframework.web.bind.annotation.*;
@RestController
public class UserController {
@PostMapping("/users/create")
public User create(@RequestBody User user) {
return user;
}
}
1-3) 확인을 위한 테스트 코드 작성
* 테스트 코드 작성하는 방법
package com.example.demo.user;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class) // 슬라이싱 테스트로 웹 계층만 테스트한다.
public class UserControllerTest {
@Autowired
MockMvc mockMvc; // @WebMvctest에 의해 자동으로 Bean에 등록해줘 바로 사용할 수 있다.
@Test
public void createUser_JSON() throws Exception {
String userJSON = "\"username\":\"coco\", \"password\":\"123\"}";
mockMvc.perform(post("/users/create")
// 1) 요청 Type
.contentType(MediaType.APPLICATION_JSON_UTF8)
// 2) 응답 Type
.accept(MediaType.APPLICATION_JSON_UTF8)
// 3) 본문 내용
.content(userJSON))
// 5) 상태 코드가 200 (OK)인지 확인
.andExpect(status().isOk())
// 6) Json 본문에 username이 coco 인지 확인
.andExpect(jsonPath("$.username", is(equalTo("coco"))))
// 7) Json 본문에 password 123 인지 확인
.andExpect(jsonPath("$.password", is(equalTo("123"))));
}
}
반응형
'Java' 카테고리의 다른 글
[Spring Boot] 템플릿 엔진 Thymeleaf 사용 방법 (0) | 2023.06.23 |
---|---|
[Spring Boot] 정적 리소스 기본 설정 및 추가 설정 방법 (0) | 2023.06.19 |
[Spring Boot] 단위 테스트(JUnit) 사용 방법 (0) | 2023.06.16 |
[Spring Boot] 프로파일(Profile) 설정 방법 (0) | 2023.06.15 |
[Spring Boot] 다양한 외부 설정(application.properties) 방법 및 활용 (0) | 2023.06.14 |