728x90
반응형
HttpMessageConverters
HTTP 요청 본문 -> 객체
또는 객체 -> HTTP 응답 본문
으로 변경할때 사용
// 예시 {"username":"jinseo", "password":"123"} -> User Object // User.java public class User { private Long id; private String username; private String password; getter/setter }
특징
- 요청에 따라 사용하는
MessageConverter
가 달라진다. Composition Object Type
일 경우JsonMessageConverter
사용String
일 경우StringMessageConverter
사용@RestController
사용 시@ResponseBody
생략 가능@Controller
사용 시@ResponseBody
생략 할 경우MessageConverter
가 미적용 되어ViewResolver
에 의해 리턴값에 해당하는View
를 찾게된다.
* Composition Object : 기존 클래스들을 조합해서 새로운 클래스를 만드는것 has-a 관계
예시
// UserControllerTest.java @RunWith(SpringRunner.class) @WebMvcTest(UserController.class) public class UserControllerTest { @Autowired MockMvc mockMvc; @Test public void createUser_JSON() throws Exception { String userJson = "{\"username\":\"jinseo\",\"password\":\"12345\"}"; mockMvc.perform(MockMvcRequestBuilders.post("/users/create") .contentType(MediaType.APPLICATION_JSON_UTF8) .accept(MediaType.APPLICATION_JSON_UTF8) .content(userJson)) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.jsonPath("$.username", Matchers.is(Matchers.equalTo("jinseo")))) .andExpect(MockMvcResultMatchers.jsonPath("$.password", Matchers.is(Matchers.equalTo("12345")))) ; } }
참고
Web on Servlet Stack
This part of the reference documentation covers support for Servlet stack, WebSocket messaging that includes raw WebSocket interactions, WebSocket emulation via SockJS, and pub-sub messaging via STOMP as a sub-protocol over WebSocket. 4.1. Introduction The
docs.spring.io
ViewResolver
ContentNegotiatingViewResolver
들어오는 요청의 Accept Header
에 따라 응답을 변환할 때 사용하고 경우에 따라 Accept Header
를 제공하지 않을경우 format
이라는 파라미터명의 값으로 리턴 포맷을 결정한다.
* Accept Header : Browser
또는 Client
가 어떠한 타입의 응답을 원한다 라고 서버에게 알려주는것
예시
// pom.xml // xml 리턴타입일 경우 의존성 추가 필요 <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.9.6</version> </dependency>
// UserControllerTest @RunWith(SpringRunner.class) @WebMvcTest(UserController.class) public class UserControllerTest { @Autowired MockMvc mockMvc; @Test public void createUser_XML() throws Exception { String userJson = "{\"username\":\"jinseo\",\"password\":\"12345\"}"; mockMvc.perform(MockMvcRequestBuilders.post("/users/create") .contentType(MediaType.APPLICATION_JSON_UTF8) .accept(MediaType.APPLICATION_XML) .content(userJson)) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.xpath("/User/username").string("jinseo")) .andExpect(MockMvcResultMatchers.xpath("/User/password").string("12345")) ; } }
728x90
반응형
'Dev > Spring Boot' 카테고리의 다른 글
[스프링 부트 개념과 활용] 스프링 웹 MVC 7부 (0) | 2020.08.26 |
---|---|
[스프링 부트 개념과 활용] 스프링 웹 MVC 4, 5, 6부 (0) | 2020.08.26 |
[스프링 부트 개념과 활용] 스프링 웹 MVC 1부 (0) | 2020.08.25 |
[스프링 부트 개념과 활용] Spring Boot Devtools (0) | 2020.08.25 |
[스프링 부트 개념과 활용] 테스트 (0) | 2020.08.24 |
댓글