1. 들어가며
스프링 MVC에서 HttpMessageConverter에 대해서 알아보자
2. 메세지 컨버터란?
스프링에서는 @RequestBody, @ResponseBody와 같은 어노테이션을 붙여주면, HTTP의 요청 본문, 응답 본문을 메세지 컨버터를 이용한다.
예제에서는 요청/응답 본문은 json 형식으로, 객체는 User를 통해서 살펴보자!
2.1. 메세지 컨버터의 종류는?
- JsonMessageConverter
- StringMessageConverter
- 등등…
3. 예제 코드
@Data
public class User {
private Long id;
private String username;
private String password;
}
@Controller
public class UserController {
@PostMapping("/user")
@ResponseBody
public User create(@RequestBody User user) {
return user;
}
}
- @ResponseBody가 없으면 -> BeanNameViewResolver를 탄다.
- 결국 MVC에서 View네임과 매핑한다. 그래서 클래스패스 하위의 JSP 파일이름(view이름)으로 매핑한다.
- @ResponseBody가 있으면 -> MessageConverter를 탄다.
- 하지만 이렇게 직접 @ResponseBody를 명시할 일이 별로 없다. API를 작성하는 경우에는 클래스에
@Controller
+@ResponseBody
조합으로 이뤄진@RestController
를 사용하면, 굳이 @ResponseBody를 붙이지 않아도 된다.
- 하지만 이렇게 직접 @ResponseBody를 명시할 일이 별로 없다. API를 작성하는 경우에는 클래스에
MockMVC를 통해서 테스트 케이스를 작성해보자.
@RunWith(SpringRunner.class)
@WebMvcTest // WebMvc 어노테이션 설정
public class UserControllerTest {
@Autowired
MockMvc mockMvc; //MockMvc 주입
@Test
public void createUser_JSON() throws Exception {
String user = "{\"username\": \"andrew\",\n" +
" \"password\": 1234" + "}";
mockMvc.perform(post("/user/create")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.accept(MediaType.APPLICATION_JSON_UTF8)
.content(user))
.andDo(print())
.andExpect(jsonPath("$.username", Matchers.is(equalTo("andrew"))))
.andExpect(status().isOk());
}
}
content-type과 accept타입을 Json 으로 설정하고, user라는 Json데이터를 요청본문에 담아서 해당 url를 호출해서 나온 결과값을 jsonpath 를 통해서 검증해 보자!
📚 Related Posts
- Spring WebFlux 테스트 방법
- Spring과 MongoDB 연동 실전 가이드
- SpringBoot, MongoDB 시작하기
- Spring Boot 서버 타임존 설정 방법
- SpringBoot CommandLineRunner, ApplicationRunner 초기화 방법
- Jackson, LocalDateTime Serialization, Deserialization 이슈
- Spring Boot, Dockerfile로 이미지 생성, 배포하기
- SpringBoot RabbitMQ 연동하기
- Junit5 정리
- Spring Sentry(에러 트래킹 서비스) 적용하기
- [Spring] 빈 주입하는 방법 && Best Practice
- Thymeleaf 실무에서 자주 사용하는 것들
- Thymeleaf Collection 정보 화면에 렌더링하기
- Spring, JPA를 이용한 REST API 만들기
- [Spring] MultipartFile을 이용한 파일 업로드
- [Spring] 모델 검증(validation)
- [Spring]HandlerMethodArgumentResolver 인터페이스
- [Spring] DispatcherServlet에 대해서 알아보자
- [Spring] MVC 만들어 보기
- [Spring] 메세지 컨버터
- [Spring] MVC 살펴보기
- [Spring] @ConfigurationProperties를 이용해서 properties값들을 클래스로 관리하기
- [Spring] Profile 설정하기
- [Spring] SpringApplication를 통한 코딩
- [Spring Boot] 스프링 부트 3가지 특징
- [Spring] @SpringBootAppllication 어노테이션에 대한 고찰
- [Spring] bean circular dependencies (빈 순환 참조)
- [Spring]Bean에 대해서 알아보자
- SpringBoot, JPA, H2를 이용한 간단한API 작성
- [Spring] Spring Data Common 프로젝트 살펴보기