SpringMVC RESTful Json Example
2015-06-12 15:08
543 查看
菜鸟学习使用,不喜勿喷!
源码demo见文尾
依次选择:File -> New -> Maven Project;
这里选择默认即可,点击Next;
选择 maven-archetype-webapp,然后点击Next;
填入你的Group Id 和 Artfact Id, 然后点击Finish;
请在项目上右击:依次选择Build Path -> Configure Build Path;
然后依次选择:Add Library -> Server Runtime -> Next; 然后选择一个Apache Tomcat Server;
BookListVO.java
HomeController.java
继续添加测试方法
使用带参数的URI:/book/{id};使用@PathVariable注解来接收
mothed:请求的method类型(GET、PUT、POST、DELETE、PATCH等)
这里为了简便,只使用了一个参数(id)
浏览器中输入:http://localhost:8080/SpringMVC-RESTful-Json/book/1 或者 http://localhost:8080/SpringMVC-RESTful-Json/book/1.json
如果不用@PathVariable来接收参数,也可以使用bean来接收。注意:参数名必须和bean的字段名相同
浏览器中输入:http://localhost:8080/SpringMVC-RESTful-Json/book/1/Complete Code/Steve McConnell/10/2013(.json)
下面我们在jsp中展示返回的数据
新建JSP测试文件:/WEB-INF/booksListDisplay.jsp
这个jsp被用于显示系统中的所有书籍。它循环遍历books集合,并且在一个表中打印它们的详细信息。这符合MVC模式的视图层。
下面测试返回json格式的数据
浏览器中输入:http://localhost:8080/SpringMVC-RESTful-Json/books.json
浏览其中输入:http://localhost:8080/SpringMVC-RESTful-Json/books/1.json
1.Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
2.Spring RESTful服务接收和返回JSON最佳实践
3.Spring MVC Hello World Example
4.Spring REST Hello World JSON Example
5.Spring REST Hello World XML Example
6.SpringMVC+Json构建基于Restful风格的应用
7.SpringMVC简单构造restful, 并返回json
8.第三章:注解式控制器开发详解 ——深入浅出学Spring Web MVC
未完待续。。。(陆续加上(POST、DELETE、PUT、PATCH))
源码demo见文尾
1 建立Maven项目
熟练可直接跳过依次选择:File -> New -> Maven Project;
这里选择默认即可,点击Next;
选择 maven-archetype-webapp,然后点击Next;
填入你的Group Id 和 Artfact Id, 然后点击Finish;
1.1报错解决方法
注意:如果新建Maven项目后,报如下错请在项目上右击:依次选择Build Path -> Configure Build Path;
然后依次选择:Add Library -> Server Runtime -> Next; 然后选择一个Apache Tomcat Server;
2 配置Spring环境
2.1项目结构
2.2 配置 pom.xml
<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>com.xg.springmvc</groupId> <artifactId>SpringMVC-RESTful-Json</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>SpringMVC-RESTful-Json Maven Webapp</name> <url>http://maven.apache.org</url> <!-- 版本号 --> <properties> <spring.version>4.1.6.RELEASE</spring.version> </properties> <dependencies> <!-- Test --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <!-- Jackson --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.6.3</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.4.2</version> </dependency> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.5.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.5.3</version> </dependency> <!-- Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.8</version> </dependency> <dependency> <groupId>xom</groupId> <artifactId>xom</artifactId> <version>1.2.5</version> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> <exclusions> <exclusion> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> </exclusion> <exclusion> <groupId>javax.jms</groupId> <artifactId>jms</artifactId> </exclusion> <exclusion> <groupId>com.sun.jdmk</groupId> <artifactId>jmxtools</artifactId> </exclusion> <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> </exclusion> </exclusions> <scope>runtime</scope> </dependency> </dependencies> <build> <finalName>SpringMVC-RESTful-Json</finalName> </build> </project>
2.3 配置 web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!-- Spring MVC DispatcherServlet --> <servlet> <!-- 在DispatcherServlet的初始化过程中, 框架会在web应用的 WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml 的配置文件, 生成文件中定义的bean。 --> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springMVC-servlet.xml</param-value> </init-param> <!-- load-on-startup是启动顺序,1是让这个Servlet随Servletp容器一起启动。 --> <load-on-startup>1</load-on-startup> </servlet> <!-- logger --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>log4j.properties</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springMVC-servlet.xml</param-value> </context-param> <!-- 乱码处理 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Spring监听 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 匹配模式 --> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 解决HTTP PUT请求Spring无法获取请求参数的问题 --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <servlet-name>springMVC</servlet-name> </filter-mapping> <display-name>springMVC</display-name> <welcome-file-list> <welcome-file>/WEB-INF/views/index.jsp</welcome-file> </welcome-file-list> </web-app>
2.4 配置 springMVC-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射--> <mvc:annotation-driven /> <!-- 默认的注解映射的支持 和 <mvc:annotation-driven /> 等价--> <!-- <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> --> <!-- 启动包扫描功能,以便注册带有@Controller、@Service、@repository、@Component等注解的类成为spring的bean --> <context:component-scan base-package="com.xg.springmvc" /> <!-- 视图解析 --> <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <!-- 返回的视图模型数据需要经过jstl来处理 --> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <!-- 查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),比如传进来的逻辑视图名为index,则该该jsp视图页面应该存放在“WEB-INF/views/index.jsp” --> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 对静态资源文件的访问 不支持访问WEB-INF目录 --> <mvc:default-servlet-handler /> <bean id="stringConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> </list> </property> </bean> <!-- 输出对象转JSON支持 --> <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="stringConverter" /> <ref bean="jsonConverter" /> </list> </property> </bean> </beans>
2.5 配置applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- 扫描包 --> <!-- 自动搜索@Controller标注的类,包括其下面的子包 --> <context:component-scan base-package="com.xg.springmvc" /> </beans>
3 测试
BookVO.javapackage com.xg.springmvc.model; import java.io.Serializable; public class BookVO implements Serializable { private static final long serialVersionUID = 1L; private int id; private String name; private String author; private int price; private String time; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } }
BookListVO.java
package com.xg.springmvc.model; import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class BookListVO implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private List<BookVO> books = new ArrayList<BookVO>(); public List<BookVO> getBooks() { return books; } public void setBooks(List<BookVO> books) { this.books = books; } }
HomeController.java
package com.xg.springmvc.controller; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.xg.springmvc.model.BookListVO; import com.xg.springmvc.model.BookVO; /** * spring实现基于RESTful风格架构 * */ @Controller public class HomeController { //logger 日志 private static final Logger logger = Logger.getLogger(HomeController.class); // URI: http://localhost:8080/SpringMVC-RESTful-Json/hi @RequestMapping(value = "/hi", produces = "text/plain;charset=UTF-8") public @ResponseBody String hello() { logger.info("测试hi"); return "Hello World !!!"; } }部署程序到Tomcat上,在浏览器中输入:http://localhost:8080/SpringMVC-RESTful-Json/hi;可看到如下
继续添加测试方法
// URI: http://localhost:8080/SpringMVC-RESTful-Json/say/hello world @RequestMapping(value = "/say/{msg}", produces = "application/json;charset=UTF-8") public @ResponseBody String say(@PathVariable("msg") String msg) { return "{\"msg\":\"you say:'" + msg + "'\"}"; }浏览器中输入:http://localhost:8080/SpringMVC-RESTful-Json/say/hello world 或者http://localhost:8080/SpringMVC-RESTful-Json/say/hello world.json
使用带参数的URI:/book/{id};使用@PathVariable注解来接收
mothed:请求的method类型(GET、PUT、POST、DELETE、PATCH等)
这里为了简便,只使用了一个参数(id)
// URI: http://localhost:8080/SpringMVC-RESTful-Json/book/1 //GET @RequestMapping(value = "/book/{id:\\d+}", method = RequestMethod.GET) public @ResponseBody BookVO getBook(@PathVariable("id") int id) { logger.info("获取书本信息id = " + id); BookVO book = new BookVO(); book.setId(id); book.setName("深入理解Java虚拟机-JVM高级特性与最佳实践"); book.setAuthor("周志明"); book.setPrice(79); book.setTime("2013"); return book; }
浏览器中输入:http://localhost:8080/SpringMVC-RESTful-Json/book/1 或者 http://localhost:8080/SpringMVC-RESTful-Json/book/1.json
如果不用@PathVariable来接收参数,也可以使用bean来接收。注意:参数名必须和bean的字段名相同
// URI: http://localhost:8080/SpringMVC-RESTful-Json/book/1/Complete Code/Steve McConnell/10/2013 @RequestMapping(value = "/book/{id}/{name}/{author}/{price}/{time}", method = RequestMethod.GET) public @ResponseBody BookVO getProductInfo(BookVO book, HttpServletRequest request, HttpServletResponse response) throws Exception { return book; }
浏览器中输入:http://localhost:8080/SpringMVC-RESTful-Json/book/1/Complete Code/Steve McConnell/10/2013(.json)
下面我们在jsp中展示返回的数据
private BookListVO getBookList() { BookListVO bookList = new BookListVO(); for (int i = 0; i < 10; i++) { BookVO book = new BookVO(); book.setId(i); book.setName("BOOK" + i); book.setAuthor("Author" + i); book.setPrice(i * 10); book.setTime("201" + i + "年"); bookList.getBooks().add(book); } return bookList; } //URI: http://localhost:8080/SpringMVC-RESTful-Json/displaybooks @RequestMapping(value = "/displaybooks", method = RequestMethod.GET) public String displayBookList(Model model) { model.addAttribute("books", getBookList().getBooks()); return "booksListDisplay"; }
新建JSP测试文件:/WEB-INF/booksListDisplay.jsp
这个jsp被用于显示系统中的所有书籍。它循环遍历books集合,并且在一个表中打印它们的详细信息。这符合MVC模式的视图层。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <html> <head> <title>Spring MVC Hello World</title> </head> <body> <h2>All Books in System</h2> <table border="1"> <tr> <th>Book Id</th> <th>Name</th> <th>Author</th> <th>Price</th> <th>Time</th> </tr> <!-- 循环遍历books基本 --> <c:forEach items="${books}" var="book"> <tr> <td>${book.id}</td> <td>${book.name}</td> <td>${book.author}</td> <td>${book.price}</td> <td>${book.time}</td> </tr> </c:forEach> </table> </body> </html>浏览器中输入:http://localhost:8080/SpringMVC-RESTful-Json/displaybooks
下面测试返回json格式的数据
//URI: http://localhost:8080/SpringMVC-RESTful-Json/books.json @RequestMapping(value = "/books", method = RequestMethod.GET) public @ResponseBody List<BookVO> listBook() { return getBookList().getBooks(); } //URI: http://localhost:8080/SpringMVC-RESTful-Json/books/1.json @RequestMapping(value = "/books/{id}", method = RequestMethod.GET) public @ResponseBody BookVO getBook(@PathVariable(value="id") Integer id) { List<BookVO> books = getBookList().getBooks(); if(id >= 0 && id < books.size()) { return books.get(id); } return null; }
浏览器中输入:http://localhost:8080/SpringMVC-RESTful-Json/books.json
浏览其中输入:http://localhost:8080/SpringMVC-RESTful-Json/books/1.json
4 Code地址
Github地址:SpringMVC-RESTful-Json5 参考资料
spring-tutorials1.Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
2.Spring RESTful服务接收和返回JSON最佳实践
3.Spring MVC Hello World Example
4.Spring REST Hello World JSON Example
5.Spring REST Hello World XML Example
6.SpringMVC+Json构建基于Restful风格的应用
7.SpringMVC简单构造restful, 并返回json
8.第三章:注解式控制器开发详解 ——深入浅出学Spring Web MVC
未完待续。。。(陆续加上(POST、DELETE、PUT、PATCH))
相关文章推荐
- Java正则表达式(二)
- spring问题:Error creating bean with name 'articleController': Injection of autowired dependencies fail
- 第一章 初识Java
- Spring MVC入门
- SpringMVC导出Excel
- dubbo、zookeeper、Spring整合实例
- java 并发
- java map遍历
- Struts在jsp页面中的一些运用
- java 获取时间相关总结
- 使用Jackson在Java中处理JSON
- Eclipse-LogcatMessageFilter设置自己的Log过滤器
- Java利用Jave转换视频格式为3gp
- 为项目添加Hibernate支持-----SSH框架搭建3
- JAVA中类、实例与Class对象
- java判断IOS还是安卓,跳转不同的连接
- 添加Structs和Spring支持-----SSH框架搭建2
- JAVA字符串谜题
- java.io.FileNotFoundException: /mnt/sdcard/config (Permission denied)
- 观察者模式及Java实现例子