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"))))
;
}
}
참고
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 |
댓글