본문 바로가기

SPRING

Spring 4 MVC REST Service Example using @RestController

SpringREST SERVICE를 제공한다 RESTful JSON service & RESTful XML service

을 사용하는 Spring 4 @RestController annotation 기반으로 만들 것이다.

JSON을 사용하기 위해서, Jackson library [jackson-databind.jar

Xml을 사용하기 위해서 Jackson XML extension [jackson-dataformat-xml.jar].를 사용할 것이다.

 

주의: 만약 브라우저에서 url 타입의 요청을 보낸다면, 제공하려는 내용의 타입을 스프링이 정의할 수 있도록 suffix [.xml/.json]를 추가해야 할 것이다.

 

Following technologies being used:

  • Spring 4.3.0.RELEASE
  • jackson-databind 2.7.5
  • jackson-dataformat-xml 2.7.5
  • Maven 3
  • JDK 1.7
  • Tomcat 8.0.21
  • Eclipse MARS.1

 

 

Step 1: Create the directory structure

 

Step 2: Update pom.xml with required dependencies

 

여기에서 주목해야할 주된 dependenciesJackson library (jackson-databind이다

Jackson library (jackson-databindJSON stringreponse data를 전환하기 위해서 사용되며,

Jackson XML Extension library (jackson-dataformat-xml)XML을 제공하기 위함이다.

 Jackson XML Extension library (jackson-dataformat-xml)이 포함되지 않으면, 오직 JSON 반응만 제공될 것이다(domain 객체가 JAXB annotations.와 함께 할당되지 않는다면)

 

 

<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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.websystique.springmvc</groupId>
	<artifactId>Spring4MVCHelloWorldRestServiceDemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<name>Spring4MVCHelloWorldRestServiceDemo</name>
	<url>http://maven.apache.org</url>

	<properties>
		<springframework.version>4.3.0.RELEASE</springframework.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<jackson.library>2.7.5</jackson.library>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${springframework.version}</version>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson.library}</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.dataformat</groupId>
			<artifactId>jackson-dataformat-xml</artifactId>
			<version>${jackson.library}</version>
		</dependency>


		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.2</version>
					<configuration>
						<source>1.7</source>
						<target>1.7</target>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-war-plugin</artifactId>
					<version>2.4</version>
					<configuration>
						<warSourceDirectory>src/main/webapp</warSourceDirectory>
						<warName>Spring4MVCHelloWorldRestServiceDemo</warName>
						<failOnMissingWebXml>false</failOnMissingWebXml>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>

		<finalName>Spring4MVCHelloWorldRestServiceDemo</finalName>
	</build>

</project>

 

Step 3: Add a Pojo/domain object

 

package com.websystique.springmvc.domain;

public class Message {
	String name;
	String text;

	public Message(String name, String text) {
		this.name = name;
		this.text = text;
	}

	public String getName() {
		return name;
	}

	public String getText() {
		return text;
	}
	
	
	
}

위의 객체는 컨트롤러부터 리턴받으며, jcakson에 의해서 Jason format으로 전환될 것이다.

만약 jackson-dataformat-xml이 존재한다면, XML로도 전환될 수 있다.

 

 

 

Step 4: Add a Controller

@PathVariable 이 파라메터가 URI template 안에 있는 변수에 연결된다는 것을 가리킨다.

여기서 주목해야할 저 흥미로운 것은 여기서 @RestController annotation을 사용한 것이다.

이것은 이 클래스가 view 대신에 도메인 객체를 리턴한다는 것을 표시한다.

그것은 더 이상 view-resolveres를 사용하지 않는다는 것을 의미하며,  더 이상 html을 직접적으로 보내지 않고,이용자가 이해할 수 있는 format으로 전환된 도메인 객체를 보낸다는 것이다.

Class path 안에 Jackson library가 포함되어져 있기 때문에, the Message objectJSON format[ or in XML으로 전환될 것이다.

 

 

package com.websystique.springmvc.controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.websystique.springmvc.domain.Message; @RestController public class HelloWorldRestController { @RequestMapping("/") public String welcome(){ return "Welcome to RestTemplate Example."; } @RequestMapping("/hello/{player}") public Message message(@PathVariable String player){ Message msg = new Message(player, "Hello " + player); return msg; } }

 

 

Step 5: Add Configuration Class

 

 

package com.websystique.springmvc.configuration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @Configuration @EnableWebMvc @ComponentScan(basePackages = "com.websystique.springmvc") public class HelloWorldConfiguration { }

 

여기서 이 클래스는 오직 component-scanning and annotation support만 제공하는데, 어떤 view_resolvers도 사용하지 않기 때문이라는 것을 알아차려야 한다.

 

 

 

 

Step 6: Add Initialization class

초기화 class를 추가(web.xml에 정의하는 spring configuration을 대체)

 

package com.websystique.springmvc.configuration;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class HelloWorldInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

	@Override
	protected Class[] getRootConfigClasses() {
		return new Class[]{HelloWorldConfiguration.class};
	}

	@Override
	protected Class

[] getServletConfigClasses() { return null; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } }

 

 

Step 7: Build and Deploy the application

jackson-dataformat-xml.jar를 포함했기 때문에, 얻을 수 있는 반응은 XML이다.

 

 

 

 

만약 SPRINGJSON response로 반응하길 원한다면,

-jackson-dataformat-xml.jar(pom.xml에 있는) 제거하거나 Suiifx the URL.json을 붙여라

 

 

원문:http://websystique.com/springmvc/spring-4-mvc-rest-service-example-using-restcontroller/