原文地址:http://websystique.com/springmvc/spring-4-mvc-rest-service-example-using-restcontroller/
【本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看。源码下载地址在文章末尾。】
【翻译 by 明明如月 QQ 605283073】
上一篇:Spring 4 MVC 视图解析器(XML JSON PDF等) 纯注解
下一篇:Spring MVC 4 RESTFul Web Services CRUD例子(带源码)【这才是restful,超经典】
本文,我们将介绍使用Spring 4 @RestController
注解实现基于RESTful JSON的 Spring 4 MVC 例子。
我们将对其进行拓展不仅支持JSON还将支持XML,只需要在POJO上简单加上JAXB注解即可。
在URL末尾加上 .json 或者 .xml获得想要的格式。
---------------------------------
使用的技术或者软件
- 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步: 创建项目结构
采用maven创建项目,不会的参考前面的文章
本文将采用纯注解的方式
第2步:修改 pom.xml 添加需要的依赖
代码语言:javascript复制 4.0.0
com.websystique.springmvc
Spring4MVCHelloWorldRestServiceDemo
war
1.0.0
Spring4MVCHelloWorldRestServiceDemo Maven Webapp
4.0.6.RELEASE
org.springframework
spring-core
${springframework.version}
org.springframework
spring-web
${springframework.version}
org.springframework
spring-webmvc
${springframework.version}
javax.servlet
javax.servlet-api
3.1.0
javax.servlet.jsp.jstl
jstl-api
1.2
javax.servlet.jsp
javax.servlet.jsp-api
2.3.1
org.codehaus.jackson
jackson-mapper-asl
1.9.13
org.apache.maven.plugins
maven-compiler-plugin
3.2
1.6
1.6
org.apache.maven.plugins
maven-war-plugin
2.4
src/main/webapp
Spring4MVCHelloWorldRestServiceDemo
false
Spring4MVCHelloWorldRestServiceDemo
配置和以前一样只是加了 Jackson library
(jackson-mapper-asl) 用来转换响应的数据成json 字符串。
Spring 4.1.x或者更高版本, 推荐使用jackson-databind 2.3 或者更高版本,来避免转换出现各种问题.详情参见:这里
为了安全起见,你可以添加jackson-databind库的最新版本
目前是2.5.3
代码语言:javascript复制 com.fasterxml.jackson.core
jackson-databind
2.5.3
第3步: 添加一个Pojo/domain对象
代码语言:javascript复制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;
}
}
此对象将从控制器返回并被jackson转换为JSON格式
第4步: 添加控制器
在 src/main/java下添加控制器
代码语言:javascript复制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("/hello/{player}")
public Message message(@PathVariable String player) {
Message msg = new Message(player, "Hello " player);
return msg;
}
}
@PathVariable添加这个参数将绑定
URI 模板. 需要注意的是使用了= @RestController
注解, 表明本类作为一个控制器,返回的是一个domain/pojo对象而不是视图. 这就意味着,不再使用视图解析器,响应中不再发送html数据,而是发送domain对象的特定形式。在本例中是 JSON 格式
.
第5步: 添加配置类
代码语言:javascript复制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 {
}
这里没添加视图解析器
第6步:添加初始化类
代码语言:javascript复制package com.websystique.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("/");
}
}
可以用下面的例子代替:
代码语言:javascript复制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[] { "/" };
}
}
第7步: 创建和发布应用
json输出
适配XML格式输出:
只需要添加JAXB注解在模型类上即可实现。
代码语言:javascript复制package com.websystique.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) {
this.name = name;
this.text = text;
}
@XmlElement
public String getName() {
return name;
}
@XmlElement
public String getText() {
return text;
}
}
编译重新发布
这样访问就需要带上拓展名
如果不带任何拓展名 默认是XML格式
项目下载地址:http://websystique.com/?smd_process_download=1&download_id=765
特别说明:此系列教程有的童鞋下载下来运行 经常404 或者改成xml方式以后
缺少org.springframework.web.context.ContextLoaderServlet等
参见:http://blog.csdn.net/w605283073/article/details/52126347