SpringMVC实现Restful风格的WebService

1.环境


  • JDK7
  • MyEclipse2014
  • tomcat8
  • maven 3.3.3
  • spring4.1.4

2.创建maven工程


  使用MyEclipse创建maven工程的方式可以参考这篇博文(链接1), 该博文中的第四小结是关于如何创建SpringMVC+maven教程。下面只给出创建好的目录结构,其中的部分文件如java程序是后面要完成的。

  SpringMVC实现Restful风格的WebService_第1张图片

3.指定依赖文件


  maven具有特定的文件结构,并通过pom.xml来管理工程。下面是在实现Restful时需要的依赖。

 1 <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">
 2   <modelVersion>4.0.0modelVersion>
 3   <groupId>com.dy.xidiangroupId>
 4   <artifactId>transportartifactId>
 5   <version>0.0.1-SNAPSHOTversion>
 6   <packaging>warpackaging>
 7   <name>transport Maven Webappname>
 8   <url>http://maven.apache.orgurl>
 9   
10   <properties>
11     <spring.version>4.1.4.RELEASEspring.version>
12   properties>
13   
14   <dependencies>
15       <dependency>
16          <groupId>junitgroupId>
17       <artifactId>junitartifactId>
18       <version>3.8.1version>
19       <scope>testscope>
20     dependency>
21     <dependency>
22         <groupId>org.springframeworkgroupId>
23         <artifactId>spring-coreartifactId>
24         <version>${spring.version}version>
25     dependency>
26     <dependency>
27       <groupId>org.springframeworkgroupId>
28       <artifactId>spring-contextartifactId>
29       <version>${spring.version}version>
30     dependency>
31     <dependency>
32       <groupId>org.springframeworkgroupId>
33       <artifactId>spring-webmvcartifactId>
34       <version>${spring.version}version>
35     dependency>
36     
37     <dependency>
38       <groupId>javax.servletgroupId>
39       <artifactId>servlet-apiartifactId>
40       <version>2.5version>
41       <scope>providedscope>
42     dependency>
43     <dependency>
44     <groupId>javax.servlet.jspgroupId>
45       <artifactId>jsp-apiartifactId>
46       <version>2.2version>
47     <scope>providedscope>
48     dependency>
49  
50     <dependency>
51          <groupId>com.fasterxml.jackson.coregroupId>
52       <artifactId>jackson-databindartifactId>
53       <version>2.3.4version>
54     dependency>
55     <dependency>
56       <groupId>com.fasterxml.jackson.coregroupId>
57        <artifactId>jackson-annotationsartifactId>
58       <version>2.4.0version>
59     dependency>
60     <dependency>
61       <groupId>com.fasterxml.jackson.coregroupId>
62       <artifactId>jackson-coreartifactId>
63       <version>2.4.3version>
64     dependency>
65   dependencies>
66  
67   <build>
68     <finalName>transportfinalName>
69   build>
70 project>
View Code

 4.配置web.xml


  web.xml的配置过程十分简单,只需指定dispatchServlet即可。

 1 DOCTYPE web-app PUBLIC
 2  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 3  "http://java.sun.com/dtd/web-app_2_3.dtd" >
 4 
 5 <web-app>
 6   <display-name>Archetype Created Web Applicationdisplay-name>
 7   
 8   <context-param>
 9        <param-name>contextConfigLocationparam-name>
10      <param-value>/WEB-INF/transport-servlet.xmlparam-value>
11   context-param>
12   <servlet>    
13         <servlet-name>transportservlet-name>    
14         <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>    
15         <load-on-startup>1load-on-startup>
16     servlet>    
17    <servlet-mapping>    
18        <servlet-name>transportservlet-name>  
19        <url-pattern>/url-pattern>    
20     servlet-mapping>  
21   <listener>
22       <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
23   listener>
24 web-app>
View Code

5.配置spring的配置文件(spring-servlet.xml)


  配置该文件时,约束文档要指定成spring4的约束,因为spring4实现了对restful的支持。

 1 xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:mvc="http://www.springframework.org/schema/mvc"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans 
 7         http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/context 
 9         http://www.springframework.org/schema/context/spring-context-4.1.xsd
10         http://www.springframework.org/schema/mvc
11          http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
12 
13     <mvc:annotation-driven />
14     <context:component-scan base-package="com.dy.xidian" />
15 beans>

6.controller的实现


  前面是已经把准备工作做完了,下面进入编程阶段。关于Restful风格的webService相信大家已经做过功课了,这里不在累述。因为应答是json格式,所以我们需要进行下面的工作。

6.1建立bean类

  在开始的图片中,我们可以看到有个Greeting.java类,它其实就是一个bean类,具体代码如下。

 1 package com.dy.xidian;
 2 
 3 public class Greeting {
 4     private final long id;
 5     private final String content;
 6 
 7     public Greeting(long id, String content) {
 8         this.id = id;
 9         this.content = content;
10     }
11 
12     public long getId() {
13         return id;
14     }
15 
16     public String getContent() {
17         return content;
18     }
19 }

6.2 在控制器中处理请求

  SpringMVC会将请求交给一个控制器来处理,所以我们必须实现这样一个控制器,不过这个控制器在编写时要遵循restful风格。

  GreetingController.java

 1 package com.dy.xidian;
 2 
 3 import java.util.concurrent.atomic.AtomicLong;
 4 
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.bind.annotation.RequestParam;
 7 import org.springframework.web.bind.annotation.RestController;
 8 
 9 @RestController
10 public class GreetingController {
11     private static final String template = "Hello, %s!";
12     private final AtomicLong counter = new AtomicLong();
13 
14     @RequestMapping("/getuser")
15     public Greeting greeting(
16             @RequestParam(value = "name", defaultValue = "World") String name) {
17         return new Greeting(counter.incrementAndGet(), String.format(template,
18                 name));
19     }
20 }

虽然控制器返回的是一个Greeting对象,但是Spring会通过Jackson工具将其转换为一个json串。

7.访问


  注意访问时输入的URL

  SpringMVC实现Restful风格的WebService_第2张图片

8.参考文章


  博文1:http://bbs.51cto.com/thread-1131636-1.html
  博文2:http://www.blogjava.net/soken/articles/371548.html
  博文3:http://wiselyman.iteye.com/blog/2002446

转载于:https://www.cnblogs.com/xidongyu/p/5347968.html

你可能感兴趣的:(java,测试,json)