1) The document describes a Spring Boot RESTful web service example that retrieves data from an Oracle table and returns it as a JSON response. It also returns a single record as an object mapped to JSON based on searching by name.
2) Jackson library and @RestController annotation are used to return the response as JSON instead of using JSP.
3) The name parameter is passed in the URL path instead of as a parameter, and is used to query the database and return the matching data as a JSON response.
1. 스프링프레임워크 & 마이바티스
(Spring Framework, MyBatis)
6-16. Spring4 WEB MVC RESTFul Web Service(JSON 응답생성하기)
오라클 테이블에서 데이터를 읽어 JSON 응답으로 만드는 기능과, NAME으로 검색하여 한 건
의 레코드를 객체로 만들어 JSON 응답으로 보내는 기능의 예제인데, 응답을 기존에 많이 사
용하는 JSP가 아닌 JSON으로 보내기 위해 jackson library 및 @RestController를 사용했다.
RestFul WebService를 구현하기 위해 파라미터가 아닌 URL경로로 NAME을 넘겨주면 이를 파
라미터로 받아서 DB 쿼리에서 인자로 이용해 해당 NAME의 데이터를 검색 후 JSON 응답으
로 만들어 클라이언트로 보냈다.@RequestHeader Annotation은 HTTP 요청 헤더 값을 컨트롤
러 메서드의 파라미터로 전달한다(메서드 파라미터가 String가 아니라면 타입변환을 자동으로
적용한다).
@ResponseBody 어노테이션은 메소드에서 리턴되는 값은 View 를 통해서 출력되지 않고
HTTP Response Body 에 직접 쓰여지게 되고, 이때 쓰여지기 전에 리턴 되는 데이터 타입에
따라 MessageConverter 에서 변환이 이뤄짂 후 쓰여지게 된다.
@RestController 어노테이션은@Controller를 상속받아 @Controller + @ResponseBody와 같
은 의미로써 Restful웹서비스를 구현할 때 응답은 항상 응답바디(response body)에 보내져야
하는데 이를위해 스프링4.0에서 특별히 @RestController를 제공한다. 도메인객체를 Web
Service로 노출 가능하며 각각의 @RequestMapping method에 @ResponseBody할 필요가 없
어짂다. 그러므로 Spring Web MVC에서 JSON or XML 포맷으로 데이터를 넘길 수 있다.
0. 전체 프로젝트 구성화면
2. 1. 오라클 scott/tiger 계정에 실습을 위한 테이블 생성
SQL> create table onj (
2 name varchar2(50),
3 url varchar2(50));
테이블이 생성되었습니다.
SQL> insert into onj values ('community','ojc.asia');
1 개의 행이 만들어졌습니다.
SQL> insert into onj values ('edu','ojcedu.com');
1 개의 행이 만들어졌습니다.
SQL> commit;
커밋이 완료되었습니다.
3. 2. STS에서
File New Spring Legacy Project
Project Name : spring4rest2
Spring MVC Project 선택
다음 화면의 top level package에서 a.b.spring4rest2 입력
3. pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>onj.spring</groupId>
<artifactId>rest</artifactId>
<name>spring4rest2</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>1.6</java-version>
<org.springframework-version>4.2.4.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>