본문 바로가기

Spring/Spring Boot

(SpringBoot) Spring Mvc(2) - HttpMessageConverters

  • 스프링 FrameWork에서 제공하는 인터페이스
  • Http요청 Body로 들어오는 것을 객체로 변환
  • 객체를 Http응답 Body로 변환

https://developer.mozilla.org/ko/docs/Web/HTTP/Messages

 

HTTP 메시지

HTTP 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식입니다. 메시지 타입은 두 가지가 있습니다. 요청(request)은 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔 하는 메시지고, 응답(response)은 요청에 대한 서버의 답변입니다.

developer.mozilla.org

 


@PostMapping("/user")
public @ResponseBody User create(@RequestBody User user) {
    return user;
}

어떤 요청을 받았는지 혹은 어떤 요청을 보낼 것인지에 따라 사용하는 MessageConverter가 다르게 적용된다.

ex) Json - Json Body 라면 Json Converter가 적용

 

 

RestController 사용 시에는 @ResponseBody를 사용할 필요가 없다. - 이미 내장되어있기 때문에

@GetMapping("/hello")
public String hello() {
    return "hello";
}
@GetMapping("/hello")
public @ResponseBody String hello() {
    return "hello";
}

@ResponseBody가 생략되어있음

 

@Controller 애노테이션을 사용하면 바로 messageConverter를 사용하는 것이 아닌 ViewResolver를 사용하여 리턴 값에 해당하는

view를 찾으려고 시도하게 된다.

 

https://joont92.github.io/spring/MessageConverter/

 

[spring] MessageConverter

앞서 우리가 HTTP 요청을 모델에 바인딩하고 클라이언트에 보낼 HTTP 응답을 만들기 위해 뷰를 사용했던 방식과는 달리, HTTP 요청 본문과 HTTP 응답 본문을 통째로 메세지로 다루는 방식이다. 주로 XML이나 JSON을 이용한 AJAX 기능이나 웹 서비스를 개발할 때 사용된다. 아래와 같이 스프링의 @RequestBody와 @ResponseBody를

joont92.github.io

 


test code 작성

전송 방식, 전송 파라미터를 설정해서 해당하는 결과가 제대로 출력되는 지를 확인

JSONObject userJson = new JSONObject();
userJson.put("username", "choi");
userJson.put("password", "123");
userJson.toString();

mockMvc.perform(post("/users/create")
        .contentType(MediaType.APPLICATION_JSON)
        .accept(MediaType.APPLICATION_JSON)
        .content(String.valueOf(userJson)))
        .andExpect(status().isOk())
        .andExpect(jsonPath("$.username",is(equalTo("choi"))))
        .andExpect(jsonPath("$.password",is(equalTo("123"))))
;

https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/MediaType.html

 

MediaType (Java(TM) EE 7 Specification APIs)

Compares obj to this media type to see if they are the same by comparing type, subtype and parameters. Note that the case-sensitivity of parameter values is dependent on the semantics of the parameter name, see HTTP/1.1. This method assumes that values are

docs.oracle.com


코드 참조

https://github.com/mike6321/Spring/tree/master/SpringBoot/SpringMvc

 

mike6321/Spring

Contribute to mike6321/Spring development by creating an account on GitHub.

github.com

 

'Spring > Spring Boot' 카테고리의 다른 글

(SpringBoot) Spring Mvc(4) - 정적 리소스 지원  (0) 2020.01.11
(SpringBoot) Spring Mvc(3) - ViewResolver  (0) 2020.01.10
(SpringBoot) Spring Mvc(1)  (0) 2020.01.10
(SpringBoot) Spring-Boot-Devtools  (0) 2020.01.06
(SpringBoot) 테스트  (0) 2020.01.05