Java

[Spring Boot/Spring MVC] HttpMessageConverters 인터페이스 개념 및 사용 방법

cob 2023. 6. 17. 15:22

 

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) 확인을 위한 테스트 코드 작성

* 테스트 코드 작성하는 방법

2023.06.16 - [Java] - [Spring Boot] 단위 테스트(JUnit) 사용 방법

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"))));
    }
}

 

 

반응형