티스토리 뷰
HttpMessageConverters
HttpMessageConverters는 스프링 프레임워크에서 제공하는 인터페이스이다.
HTTP 요청 본문을 객체로 변경하거나, 객체를 HTTP 응답 본문으로 변경할 때 사용한다. 사용하는 HttpmessageConverter는 여러가지가 있고, 우리가 어떤 요청을 받았는지, 응답을 보내는지에 따라서 메세지컨버터가 달라진다.
{"username":"keesun", "password":"123"} <-> User
@RequestBody
@ResponseBody
아래에서 User(객체)를 리턴할 때는 기본적으로 JsonMessageConverter가 사용이되고, String타입을 이턴할 때는 StringMessageConverter가 사용이 된다. int도 마찬가지로 StringMessageConverter이다.
@RestController면 @ResponseBody는 생략해도 된다.
MessageConverter를 타고 객체를 응답 본문으로 바꾼다.
그냥 @Controller를 사용할 경우에는 @ResponseBody를 넣어야 MessageConverter가 적용이된다.
("/user")
public User create( User user) {
...
return new User( ... );
}테스트
MockMvc를 사용해서 post요청에 대한 응답을 확인하기 위한 테스트코드이다.
요청을 @RestController에서 @RequestBody가 json을 파싱해서 User 객체로 만들고, JsonMessageConverter에 의해 User가 JSON 형태로 만들어져서 return 된다.
테스트코드에서는 jsonPath를 사용해서 결과로 받은 status와 JSON의 프로퍼티를 검증한다.
POST요청의 요청 타입은 JSON이고, 응답을 원하는 타입을 의미하는 accept 헤더도 JSON으로 세팅한다.
package io.namjune.springbootconceptandutilization.user;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
(SpringRunner.class)
(UserController.class)
public class UserControllerTest {
MockMvc mockMvc;
public void createUser_JSON() throws Exception {
String userJson = "{\"username\":\"namjune\", \"password\":\"123\"}";
mockMvc.perform(post("/users/create")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.accept(MediaType.APPLICATION_JSON_UTF8)
.content(userJson)
)
.andExpect(status().isOk())
.andExpect(jsonPath("$.username", is(equalTo("namjune"))))
.andExpect(jsonPath("$.password", is(equalTo("123"))));
}
}
public class UserController {
("/hello")
public String hello() {
return "hello";
}
("/users/create")
public User create( User user) {
return user;
}
}
public class User {
private Long id;
private String username;
private String password;
}
'ICT Eng > Spring' 카테고리의 다른 글
[Spring Boot] 정적 리소스 지원(static resources) (0) | 2019.01.15 |
---|---|
[Spring Boot] ViewResolver (0) | 2019.01.11 |
[Spring Boot] 스프링 웹 MVC (0) | 2019.01.10 |
[Spring Boot] 스프링 부트 테스트 (0) | 2018.12.14 |
[Spring Boot] 스프링 부트 로깅(기본 로깅, 커스텀 로깅) (0) | 2018.12.10 |
- Total
- Today
- Yesterday
- 젠킨스
- 인프런
- Recursion
- JPA
- RBT
- Java
- springboot
- Wisoft
- 정렬
- 한밭이글스
- 레드블랙트리
- Raspberry Pi
- 한밭대학교
- github
- ORM
- 자바
- vuex
- 라즈베리파이
- vuejs
- IT융합인력양성사업단
- 순환
- Algorithm
- 시간복잡도
- Spring Boot
- Spring
- Vue.js
- 알고리즘
- AWS
- 무선통신소프트웨어연구실
- 스프링부트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |