[SpringBoot][WebMVC] HttpMessageConverters
2022. 11. 8. 12:00ㆍJAVA/Spring
HttpMessageConverters란 무엇인가?
HTTP 요청 본문을 객체로 변경하거나, 객체를 HTTP 응답 본문으로 변경할 때 사용하는 컨버터
{”username” : “yonghwan”, “password” : “123”} ↔ User
@RequestBody
- HTTP 요청 본문을 객체로 변환
@ResponseBody
- 객체를 HTTP 요청 본문으로 변환
- 컨트롤러에 @RestController가 붙어있으면 리턴 타입에 @ResponseBody를 생략할 수 있음
// before
@PostMapping("/users/create")
public @ResponseBody User create(@RequestBody User user){
return user;
}
// after
@PostMapping("/users/create")
public User create(@RequestBody User user){
return user;
}
@RestController
- @RestController는 @Controller에 @ResponseBody가 추가된 형태
- @RestController의 주목적은 Json 형태로 객체 데이터를 반환하는 것
- @RestController를 붙이게 되면 각 매핑 메서드의 반환값들은 뷰 네임 리졸버(ViewNameResolver)를 타지 않고 HttpMessageConverters를 타게되어 Response 본문으로 나가게 됩니다.
- @Controller를 붙이게 되면 각 매핑 메서드의 반환값들은 뷰 네임 리졸버를 타게되어 templates/ 아래에 해당하는 뷰 네임이 있는지 탐색하게 됩니다.
실습, @RestController + @RequestBody + @ResponseBody
- @ResponseBody 애노테이션 같은 경우 @RestController이 붙어있기 때문에 생략이 가능함
@WebMvcTest(UserController.class)
public class UserControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void testCreateUser_JSON() throws Exception {
String userjson = "{\\"username\\" : \\"yonghwan\\", \\"password\\" : \\"123\\"}";
mockMvc.perform(post("/users/create")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.content(userjson))
.andExpect(status().isOk())
.andExpect(jsonPath("$.username",
is(equalTo("yonghwan"))))
.andExpect(jsonPath("$.password",
is(equalTo("123"))));
}
}
@RestController
public class UserController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
@PostMapping("/users/create")
public User create(@RequestBody User user){
return user;
}
}
@Getter
@Setter
public class User {
private Long id;
private String username;
private String password;
}
References
source code : https://github.com/yonghwankim-dev/springboot_study/tree/main/springboot_webmvc/src/test/java/kr/yh/user
[인프런] 스프링 부트 개념과 활용
[Spring] @Controller와 @RestController 차이
'JAVA > Spring' 카테고리의 다른 글
[SpringBoot][WebMVC] 웹 JAR (0) | 2022.11.10 |
---|---|
[SpringBoot][WebMVC] 정적 리소스 지원 (0) | 2022.11.09 |
[SpringBoot] 스프링부트 통합테스트, 단위테스트 (0) | 2022.11.07 |
[SpringBoot] OutputCaputre 테스트 유틸리티 (0) | 2022.11.06 |
[SprinBoot] 로거(Logger) 커스터마이징 (0) | 2022.11.06 |