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 프로젝트 살펴보기