참고도서
|
1. JSON(JavaScript Object Notation)으로 변환
1 2 3 4 5 6 7 | { "seq":1, "title":"가입인사", "content":"잘 부탁드립니다.", "regDate":2016-03-19, "cnt":0 } | cs |
JSON 배열 형태
1 2 3 4 | [ {"seq":2, "title":"임시제목", "content":"임시 내용", "regDate":2016-03-19, "cnt":0}, {"seq":1, "title":"가입인사", "content":"잘 부탁드립니다.", "regDate":2016-03-19, "cnt":0}, ] | cs |
(2) Jackson2 라이브러리
Maven Repository 에서 jackson databind 를 검색해서 pom.xml 에 등록
jackson-databind, jackson-annotation, jackson-core 라이브러리가 다운로드 됨
(3) HttpMessageConverter Interface
브라우저에서 서블릿이나 JSP 파일을 요청하면, 서버는 클라이언트가 요청한 서블릿이나 JSP를 찾아서 실행한다.
그리고, 실행 결과를 Http 응답 프로토콜 메시지 보디(message body) 에 저장해서 브라우저에 전송한다.
이 응답 결과를 HTML이 아닌 JSON 이나 XML 로 변환하여 메시지 보디에 저장하려면,
스프링에서 제공하는 HttpMessageConverter 인터페이스를 구현한 변환기(Converter)를 사용해야 한다.
HttpMessageConverter 인터페이스를 구현한 많은 클래스 중 JSON 으로 변환해 주는 클래스는
MappingJackson2HttpMessageConverter 이다.
View 와 관련된 사항이기 때문에 Presentation Layer 의 스프링 컨테이너 설정 파일에 등록해서 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- presentation-layer.xml 에 등록 --> <!-- namespace에 mvc 등록 --> <!-- mappingJackson2HttpMessageConverter 등록 --> <!-- <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> --> <!-- HttpMessageConver를 구현한 모든 변환기가 생성된다. --> <mvc:annotation-driven/> <!-- mvc:annotation-driven 이 생성하는 스프링 객체들 DefaultAnnotationHandlerMapping AnnotationMethodHandlerAdapter ConfigurableWebBindingInitializer HttpMessageConver를 구현한 모든 변환기(메시지 컨버터) 등 --> | cs |
(4) Controller 등록
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //dataTransform.do 요청 @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); return boardListVO; } /* @ResponseBody 가 붙은 메소드의 반환 값은 자바 객체를 HTTP 응답 프로토콜의 몸체로 변환된다. <mvc:annotation-driven> 을 추가했기 때문에 MappingJackson2HttpMessageConverter 에 의해 JSON 형태로 변환되어 HTTP 보디에 설정된다. Jackson2 라이브러리를 받았기 때문에 스프링은 많은 컨버터 빈 객체 중 MappingJackson2HttpMessageConverter 빈 객체를 를 사용한다. ROME 라이브러리 -> AtomFeedHttpMessageConverter JAXB2 라이브러리 -> Jaxb2RootElementHttpMessageConverter */ | cs |
HTTP 보디에 설정되는 VO 객체의 데이터 중 JSON 변환에서 제외하려면,
@JasonIgnore 어노테이션을 사용하면 된다.
1 2 3 4 5 6 7 8 | public class BoardVO{ // @JsonIgnore 어노테이션은 JSON 변환을 원하지 않는 데이터(필드)의 getter에 설 @JsonIgnore public String getSearchCondition(){ return searchCondition; } } | cs |
2. XML로 변환
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | // XML 변환 처리 // XmlAccessType.FIELD -> 필드가 자동으로 자식 엘리먼트로 표현됨 @XmlAccessorType(XmlAccessType.FIELD) public class BoardVO { // @XmlAttribute, seq를 속성으로 표시 -> <BoardVO seq="값"> @XmlAttribute private int seq; private String title; private String writer; private String content; // 자바객체를 XML로 변환하려면 클래스에 기본 생성자가 있어야 하는데, // java.sql.Data 는 기본 생성자가 없기 때문에 // java.util.Date 타입으로 설정해야 한다. private Date regDate = new Date(); private int cnt; // @XmlTransient, XML 변환에서 제외 @XmlTransient private String searchCondition; @XmlTransient private String searchKeyword; @XmlTransient private MultipartFile uploadFile; | cs |
(3) BoardListVO 추가
XML 문서는 반드시 단 하나의 루트 엘리먼트를 가져야 한다. BoardVO는 하나의 게시글 정보를 저장하려고 사용하는 객체이다.
여러 게시글 목록을 XML 로 표현해야 하기 때문에, BoardVO 객체(자식 엘리먼트) 여러 개를 포함하면서 루트 엘리먼트로 사용할
또 다른 자바 클래스가 필요하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // @XmlRootElement(name = "boardList") -> 루트 엘리먼트 이름을 boardList 로 설정 @XmlRootElement(name = "boardList") @XmlAccessorType(XmlAccessType.FIELD) public class BoardListVO { // 필드명인 boardList 가 엘리먼트 이름으로 사용된다 // 엘리먼트 이름을 board 로 @XmlElement(name = "board") private List<BoardVO> boardList; public List<BoardVO> getBoardList() { return boardList; } public void setBoardList(List<BoardVO> boardList) { this.boardList = boardList; } } | cs |
(4) Controller 등록
1 2 3 4 5 6 7 8 9 10 11 | //dataTransform.do 요청 @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); return boardListVO; } | cs |
'Programming > Spring' 카테고리의 다른 글
Spring JdbcTemplate Transaction (0) | 2017.08.22 |
---|---|
Spring JdbcTemplate Method (0) | 2017.08.22 |
다국어 처리 (0) | 2017.08.20 |
파일 업로드 / 예외처리 (0) | 2017.08.20 |
AOP 기초 (0) | 2017.08.19 |
댓글