티스토리 뷰
JSON은 JavaScript Object Notaion 의 약자로, 다른 시스템(다른 언어)와 어떤 정보를 교환하기 쉽도록 고안된 데이터 형식으로 다음과 같이 키:값 형태로 표현한다.
{
"seq":1,
"title":"one"
}
바로 확인해보자.
1. JSON 형식
1) Jackson2 라이브러리 설치
pom.xml 에 dependency 를 추가하여 라이브러리를 설치한다.
◎pom.xml
<!-- Jackson2 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.2</version>
</dependency>
2) HttpMessageConvertor 등록
일반적으로 브라우저에서 서블릿이나 jsp 파일을 요청하면, 서버는 클라이언트가 요청한 서블릿이나 jsp를 찾아서 실행한다. 그리고 그 실행 결과를 Http 응답 프로토콜 메시지 Body 에 저장하여 브라우저에 전송한다. 이 때, 이 응답 결과를 HTML이 아닌 JSON이나 XML로 변환하여 메시지 Body에 저장하려면 Spring에서 제공하는 컨버터를 사용해야한다.
◎presentation-layer.xml
<mvc:annotation-driven></mvc:annotation-driven>
위와 같이 설정하면 HttpMessageConvertter를 구현한 모든 컨버터가 생성된다.
3) 링크 추가 및 Controller 수정
데이터를 JSON으로 변환하여 출력할 수 있도록 dataTransform.do 요청을 보낼 a 태그를 하나 생성하고, Controller를 수정해준다.
◎index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Main Page</title>
</head>
<body align="center">
<h1>게시판 프로그램</h1>
<hr>
<div align="center">
<a href="login.do">로그인</a><br /><br /><br />
<a href="getBoardList.do">글 목록 바로가기</a>
<a href="dataTransform.do">글 목록 바로가기</a>
</div>
</body>
</html>
이때, @ResponseBody 어노테이션을 이용하여 자바 객체를 Http응답 프로토콜의 Body로 변환할 수 있다.
◎Controller
// 데이터 변환
@RequestMapping("/dataTransform.do")
@ResponseBody
public List<BoardVO> dataTransform(BoardVO vo){
vo.setSearchCondition("TITLE");
vo.setSearchKeyword("");
List<BoardVO> boardList=boardService.getBoardList(vo);
return boardList;
}
정상적으로 JSON 형식으로 데이터가 추출되는 걸 확인할 수 있다.
또한 다음과 같이 getter 메서드 상단에 @JsonIgnore를 추가하여 JSON 형식으로 변환하지 않을 맴버 변수도 지정할 수 있다.
◎BoardVO
@JsonIgnore
public String getSearchCondition() {
return searchCondition;
}
public void setSearchCondition(String searchCondition) {
this.searchCondition = searchCondition;
}
@JsonIgnore
public String getSearchKeyword() {
return searchKeyword;
}
2. XML 형식
1), 2) 단계는 JSON과 동일하며, 붙여주는 어노테이션만 다르게 작성해주면 JSON 대신 XML 형식으로 데이터를 추출할 수 있다.
3) 어노테이션 추가
XML 형식으로 데이터를 변환할 Command 객체 클래스 선언부 상단에 @XmlAccessorType(XmlAccessType.FIELD) 어노테이션을 작성한다. 또한 XML문서는 반드시 단 하나의 루트 엘리먼트를 가져야 하기 때문에, 만약 BoardVO 를 사용하여 게시글의 목록을 표현하려고 한다면, BoardListVO 객체를 생성해야 한다.
◎BoardListVO
package com.freeflux.biz.board;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "boardList")
@XmlAccessorType(XmlAccessType.FIELD)
public class BoardListVO {
@XmlElement(name = "board")
private List<BoardVO> boardList;
public BoardListVO() {
}
public List<BoardVO> getBoardList() {
return boardList;
}
public void setBoardList(List<BoardVO> boardList) {
this.boardList = boardList;
}
@Override
public String toString() {
return "BoardListVO [boardList=" + boardList + "]";
}
}
이후 전체를 감싸는 루트 엘리먼트의 이름을 @XmlRootElement(name=) 어노테이션을 사용하여 선언해주고, 태그로 사용할 변수명을 @XmlElement를 사용하여 선언한다. @XmlElement는 생략이 가능하지만, 생략한다면, 변수명인 boardList로 설정된다.
이제 Controller부분만 List를 꺼낼 수 있게 설정해주면, 완료된다.
◎Controller
// 데이터 변환 : XML
@RequestMapping("/dataTransform.do")
@ResponseBody
public BoardListVO dataTransform(BoardVO vo){
vo.setSearchCondition("TITLE");
vo.setSearchKeyword("");
List<BoardVO> boardList=boardService.getBoardList(vo);
BoardListVO boardListVO=new BoardListVO();
boardListVO.setBoardList(boardList);
System.out.println("~~~~ => " +boardListVO.toString());
return boardListVO;
}
'[JAVA] > Spring' 카테고리의 다른 글
[Spring] Gradle기반 Spring Project 생성 (0) | 2022.01.18 |
---|---|
[Spring] Spring Project 예제: To Do List (0) | 2021.07.01 |
[Spring] 다국어 처리 (0) | 2021.06.28 |
[Spring] 파일 업로드 (0) | 2021.06.28 |
[Spring] Spring MVC 8: 비즈니스 컴포넌트 로딩 (0) | 2021.06.28 |
- redux-thunk
- 인천 구월동 맛집
- 인천 구월동 이탈리안 맛집
- javascript
- AsyncStorage
- react
- Async
- 맛집
- redux
- await
- 파니노구스토
- 정보보안기사 #실기 #정리
- Promise
- react-native
- 이탈리안 레스토랑
- Total
- Today
- Yesterday