Spring4MVCREST服务使用@RestController实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Spring4MVCREST服务使⽤@RestController实例
在这篇⽂章中,我们将通过开发使⽤ Spring4 @RestController 注解来开发基于Spring MVC4的REST风格的JSON服务。

我们将扩展这个例⼦通过简单的注释与JAXB标注域类⽀持XML输出和JSON输出。

在这个⽰例中,我们需要URL的后缀为 .xml 或 .json 以获得所需的输出。

使⽤以下技术:
Spring 4.0.6.RELEASE
jackson-mapper-asl 1.9.13
Maven 3
JDK 1.6
Tomcat 7.0.54
Eclipse JUNO Service Release 2
让我们现在开始!
第1步:创建⽬录结构
之前的⽂章使⽤Eclipse创建Maven Web项⽬包含了⼀步⼀步的指导,使⽤ Eclipse 来创建⼀个Maven项⽬
(Spring4MVCRestServiceDemo)。

下⾯是最终的项⽬⽬录结构:
我们将使⽤ Spring Java配置⽽不使⽤XML。

现在,让我们来添加/更新上述项⽬结构中提到的内容。

第2步:使⽤ pom.xml 更新所需的依赖
<?xml version="1.0"?>
<project
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"
xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yiibai.springmvc</groupId>
<artifactId>Spring4MVCRestServiceDemo</artifactId>
<packaging>war</packaging>
<version>1.0.0</version>
<name>Spring4MVCRestServiceDemo Maven Webapp</name>
<properties>
<springframework.version>4.0.6.RELEASE</springframework.version>
</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>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<warName>Spring4MVCRestServiceDemo</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<finalName>Spring4MVCRestServiceDemo</finalName>
</build>
</project>
上⾯的 pom.xml 与以前的教程中定义的相同。

有⼀个显着的区别:我们已经包括⼀个依赖于Jackson 库(jackson-mapper-asl),其将⽤于所述响应数据转换成JSON字符串。

对于Spring 4.1.x 和以上, jackson-databind 2.3或以上是推荐使⽤的,以避免转换问题。

安全的选择,你可以包括 jackson-databind 最新版本。

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>
第3步:添加⼀个POJO/域对象
package com.yiibai.springmvc.domain;
public class Message {
String name;
String text;
public Message(String name, String text) {
= name;
this.text = text;
}
public String getName() {
return name;
}
public String getText() {
return text;
}
}
上述对象将从控制器返回 Jackson 转换成 JSON 的格式。

第4步:添加控制器
在 src/main/java 包下添加控制器类,如下图所⽰。

package com.yiibai.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.yiibai.springmvc.domain.Message;
@RestController
public class HelloWorldRestController {
@RequestMapping("/hello/{player}")
public Message message(@PathVariable String player) {
Message msg = new Message(player, "Hello " + player);
return msg;
}
}
@PathVariable表⽰参数将被绑定到变量 URI 模板。

更有趣的事情,这⾥要注意的是,这⾥我们使⽤的是 @RestController 注解,这标志着这个类作为控制器,每⼀个⽅法返回域对象/pojo代替⼀个视图。

这意味着我们不再使⽤视图解析器,我们不再直接发送响应的HTML,我们
只发送的域对象转换成格式。

在我们的例⼦中,由于 jackson 包含在类路径中,消息对象将转换成JSON格式。

第5步:添加配置类
package com.yiibai.springmvc.configuration;
import ponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.yiibai.springmvc")
public class HelloWorldConfiguration {
}
在这⾥,这个类是主要提供组件,扫描和注释⽀持。

需要注意的是,我们没有任何视图解析器配置,因为我们在Rest案例并不需要。

第6步:添加初始化类
添加⼀个初始化类实现WebApplicationInitializer在src/main/java,使⽤如下图所⽰指定包(在这种情况下,替代在web.xml中定义的任何spring的配置)。

在Servlet 3.0容器启动时,这个类会被加载并实例,它是在启动时⽅法将通过servlet容器调⽤。

package com.yiibai.springmvc.configuration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
public class HelloWorldInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext container) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(HelloWorldConfiguration.class);
ctx.setServletContext(container);
ServletRegistration.Dynamic servlet = container.addServlet(
"dispatcher", new DispatcherServlet(ctx));
servlet.setLoadOnStartup(1);
servlet.addMapping("/");
}
}
更新:请注意,上⾯的类可以写成更加简洁[和它的⾸选⽅式],通过扩展 AbstractAnnotationConfigDispatcherServletInitializer 基类,如下所⽰:
package com.yiibai.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[] { "/" };
}
}
第7步:构建和部署应⽤程序
现在构建 war(在 Eclipse中)或通过 Maven 命令⾏( mvn clean install)。

部署 war ⽂件到Servlet3.0容器。

运⾏它。

访问: http://localhost:8080/Spring4MVCRestServiceDemo/hello/Messi ,您将看到 JSON 输出,如下图所⽰:
就这样,所有输出如上所⽰。

适应XML输出
现在,如上⾯提到的,只是通过增加模型类(Message)JAXB注释,我们可以让XML输出⽀持以及JSON输出。

下⾯是相同的演⽰:package com.yiibai.springmvc.domain;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "pizza")
public class Message {
String name;
String text;
public Message(){
}
public Message(String name, String text) {
= name;
this.text = text;
}
@XmlElement
public String getName() {
return name;
}
@XmlElement
public String getText() {
return text;
}
}
编译,部署并再次运⾏它,会看到下⾯的输出(注意URL后缀),访问URL:
http://localhost:8080/Spring4MVCRestServiceDemo/hello/Yiibai.xml
如果没有任何后缀,默认格式是XML:
到这⾥,全部完成!。

相关文档
最新文档