Spring에서 Media Type 설정하기

yeonicerely·2022년 11월 28일
0

MIME(Mulipuerpose Internet Mail Extensions) type 또는 content type이라고도 불리는 MediaType은 MIME로 변환된 파일의 종류를 알리는데 사용한다. 이때 MIME는 웹을 통해 여러 형태의 파일을 전달하는데에 쓰이고 있는 파일 변환 방법이다.

Spring MVC에서는 Request와 Response을 할 때 MediaType을 지정해서 특정 타입의 정보만 요청받고 응답할 수 있다.

@GetMapping을 할 때 consumes나 @PostMapping을 할 때 produces에 특정 값을 넣어주어 MediaType을 지정해줄 수 도 있다. (consumes에서 설정한 타입과 맞지 않으면 405, produces에서 설정한 타입과 맞지 않으면 406 에러가 발생한다고 한다)

@RestController
@RequestMapping("/api/v1/users")
@RequiredArgsConstructor
@Slf4j
public class UserController {

    private final UserService userService;

    @PostMapping(value = "/join", produces = MediaType.APPLICATION_JSON_VALUE)
    public Response<UserJoinResponse> join(@RequestBody UserJoinRequest userJoinRequest){
        log.info(userJoinRequest.getUserName(), userJoinRequest.getEmail());
        UserDto userDto = userService.join(userJoinRequest);
        return Response.success(new UserJoinResponse(userDto.getUserName(), userDto.getEmailAddress()));

    }
}

또한 application.yml(application.properties)의 세팅을 통해서도 MediaType을 지정해줄 수 있다. 아래 코드는 application.yml에서 Response와 Request에서 UTF-8의 형태로 MediaType을 지정해주었다.

#application.yml

server:
  servlet:
    encoding:
      force-response: true

이는 테스트 코드의 결과를 보면 확인할 수 있다.

MockHttpServletRequest:
      HTTP Method = POST
      Request URI = /api/v1/users/join
       Parameters = {}
          Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"66"]


...

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = [Content-Type:"application/json;charset=UTF-8"]
     Content type = application/json;charset=UTF-8


참고자료
1. Spring media type에 대한 설명: https://pozafly.github.io/spring/MediaType/

0개의 댓글