RESTful(2) - XML/JSON 변환처리(@RequestBody, @ResponseBody, HttpMessageConverter)
2019. 11. 25. 11:13ㆍ🔴 Spring
300x250
- HTTP기반 API형태로 제공하는 서비스 → XML/JSON형식 사용 (REST의 응답형태)
- JSON이란? = JavaScript Object Notation :
경량의 데이터 교환 형식, JS에서 객체를 만들때 사용하는 표현식임
특정 언어에 종속되지 않으며, 용량이 작아서 최근에는 XML을 대체해서 데이터 전송 등에 많이 사용됨 - XML이란? = Extensible Markup Language :
HTML과 유사한 문자 기반의 마크업 언어, 사람과 기계가 동시에 읽기 편한 구조로 되어있음
하지만 HTML과 달리 데이터를 보여주는 목적이 아닌 데이터를 저장하고 전달하는 목적으로만 만들어졌음 - @RequestBody & @ResponseBody 사용해서 쉽게 구현
- @RequestBody : JSON형식의 요청 → 자바 객체로 변환
- @ResponseBody : 자바 객체 → JSON 이나 XML형식의 문자열로 변환
- HttpMessageConverter를 이용 → 자바객체 & HTTP요청/응답 사이를 변환처리
예제
<form.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post">
이름<input type="text" name="name"><br>
나이<input type="text" name="age"><br>
<input type="submit">
</form>
</body>
</html>
<SimpleConverterController.java>
package com.bitcamp.mvc;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/mc/simple")
public class SimpleConverterController {
@RequestMapping(method=RequestMethod.GET)
public String form() {
return "form";
}
@ResponseBody // 자바 객체 → JSON 이나 XML형식의 문자열로 변환
@RequestMapping(method = RequestMethod.POST)
public String simple(@RequestBody String body)
// @ResponseBody ---> String을 보고 객체 형태 판단함
// @RequestBody ---> String을 보고 객체 형태 판단함
// !!view를 return할 것인지, 그 외의 것을 return할 것인지를 생각하고 @ResponseBody를 사용하자!!
// JSON형식의 요청 → 자바 객체로 변환
// 요청 HTTP데이터 -> String body로 전달
{
System.out.println(body);
return body;
}
}
⇒ content-type text/html → text/html 으로 받아짐 (입력 전 → submit 후)
이는 AnnotationMethodHandlerAdapter 클래스에 의해 콘텐츠 타입이 지정되었기 때문이다.
하지만 만약에 JSON형태로 보낸 것이라면? 콘텐츠 타입이 text/html이면 application입장에서는 JSON형태인지 인지하지 못한다.
따라서 setContentType으로 바꿔주던가, JAXB2의 lib를 이용해서 xml이라는 것을 명시해줘야 한다!!
jackson-databind : DATA를 JSON 형태로 바꿔주는것,
하지만 AnnotationMethodHandlerAdapter : 콘텐츠 타입을 바꿔주는 것
300x250
'🔴 Spring' 카테고리의 다른 글
RESTful(4) - @RestController 사용하기 (단순문자열, 객체타입, List타입, Map타입) (0) | 2019.11.26 |
---|---|
RESTful(3) - JAXB2 API이용해서 XML처리하기 (0) | 2019.11.25 |
RESTful(1) - @PathVariable 사용하기 (0) | 2019.11.25 |
MyBatis를 이용한 DAO구현 (0) | 2019.11.20 |
MyBatis란? Spring + MyBatis 연동 (0) | 2019.11.20 |