Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Greedy
- JDBC
- 자바
- 스프링
- Thymeleaf
- 스프링 핵심 원리
- Spring Boot
- Android
- 인프런
- 그리디
- transaction
- springdatajpa
- 알고리즘
- kotlin
- JPQL
- http
- pointcut
- 스프링 핵심 기능
- QueryDSL
- 백준
- 김영한
- java
- jpa
- Proxy
- Exception
- SpringBoot
- db
- AOP
- spring
- Servlet
Archives
- Today
- Total
개발자되기 프로젝트
HTTP 요청 메시지 - JSON 본문
1. JSON 형식 data 받기 v1
- ObjectMapper : JSON <--> Object
@Slf4j
@Controller
public class RequestBodyJsonController {
private ObjectMapper objectMapper = new ObjectMapper();
@PostMapping("/request-body-json-v1")
public void requestBodyJsonV1(HttpServletRequest request, HttpServletResponse response) throws IOException {
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
log.info("messageBody = {}",messageBody);
//json -> object
HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
log.info("username = {}, age={}", helloData.getUsername(), helloData.getAge());
}
}
2. @RequestBody, @ResponseBody 사용
@ResponseBody
@PostMapping("/request-body-json-v2")
public String requestBodyJsonV1(@RequestBody String messageBody) throws IOException {
log.info("messageBody = {}",messageBody);
//json -> object
HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
log.info("username = {}, age={}", helloData.getUsername(), helloData.getAge());
return "ok";
}
- HttpEntity , @RequestBody 를 사용하면
- HTTP 메시지 컨버터가 HTTP 메시지 바디의 내용을 문자나 객체 등으로 변환해준다.
3. JSON을 객체로 변환해서 받기.
- ObjectMapper쓰고,, 귀찮은데...
- HTTP 메시지 컨버터는 JSON도 객체로 변환할 수 있음.
- @RequestBody를 사용하는 경우 별도 ObjectMapper없이도 직접 만든 객체로 받을 수 있음.
@ResponseBody
@PostMapping("/request-body-json-v3")
public String requestBodyJsonV3(@RequestBody HelloData helloData){
log.info("username = {}, age={}", helloData.getUsername(), helloData.getAge());
return "ok";
}
4. @RequestBody 생략 가능??
- @RequestBody를 생략하면 위의 예제는 HelloData 를 받는다.
- 어? @RequestParam, @ModelAttribute 생략한거랑 헷갈림
- @RequestParam은 String, int 등 에 적용되고
- 나머지는 @ModelAttribute가 적용된다.
- 즉 @RequestBody를 생략하면 ... @ModelAttribute가 적용된다.
- 따라서 파라미터로 넘어오는 값들이 @ModelAttribute에 의해 HelloData에 바인딩 된다.
5. 주의
- HTTP 요청시에 content-type이 application/json 으로 지정 되어야
- JSON을 처리할 수 있는 HTTP 메시지 컨버터가 실행된다.
6. HTTP Entity 사용 가능
@ResponseBody
@PostMapping("/request-body-json-v4")
public String requestBodyJsonV4(HttpEntity<HelloData> helloData){
HelloData messageBody = helloData.getBody();
log.info("username = {}, age={}", messageBody.getUsername(), messageBody.getAge());
return "ok";
}
7. JSON 반환.
- @ReponseBody가 적용되어 있으면
- return이 나갈 때도 HTTP 메시지 컨버터가 작동된다.
- 즉 생성된 객체가 메시지 컨버터에 의해 JSON으로 바뀌고 응답 메시지 body 에 담겨서 나감.
@ResponseBody
@PostMapping("/request-body-json-v5")
public HelloData requestBodyJsonV5(@RequestBody HelloData helloData){
log.info("username = {}, age={}", helloData.getUsername(), helloData.getAge());
return helloData;
}
8. 정리
- @RequestBody 요청
- JSON 요청 --> HTTP 메시지 --> 컨버터 객체
- @ResponseBody 응답(Client 의 Accept 확인 필요)
- 객체 --> HTTP 메시지 컨버터 --> JSON 응답
9. GitHub : 210914 JSON
'인프런 > [인프런] 스프링 MVC 1' 카테고리의 다른 글
HTTP response - HTTP API, 메시지 바디에 직접 입력 (0) | 2021.09.15 |
---|---|
Response - static resource, View Template (0) | 2021.09.15 |
HTTP 요청 메시지 - 단순 텍스트 (0) | 2021.09.14 |
HTTP 요청 파라미터 - @ModelAttribute (0) | 2021.09.14 |
HTTP 요청 파라미터 - @RequestParam (0) | 2021.09.14 |
Comments