使用Spring MVC 4构建RESTful服务相对于其它框架来说,有很多优势。首先,Spring MVC 4作为Spring的框架之一,可以很好地与Spring进行集成。其次,Spring MVC 4的拦截器是在方法层级上的拦截,相对于其它MVC框架(如Struts2)的拦截器具有更高的效率。再者,Spring MVC 4采用基于注解的配置,入手容易,开发灵活。


    Spring MVC 4采用的是jacson解析JSON。jacson一款非常高效强大的JSON工具类,可以轻松地在JAVA对象与json对象和XML文档之间进行序列化和反序列化。本文中的例子采用的是Spring 4.1.1.RELEASE和jacson 2.4.0版本,经测试无任何异常。接下来,上干货:


    开发环境准备:

        Eclipse Luna

        Apache Tomcat 8.0

        JDK 1.7

        Spring 4.1.1.RELEASE

        jackson 2.4.0


    工程目录如下:

使用Spring MVC 4构建Restful服务_第1张图片



    1. 新建Maven Project,选择在“Archetype类型”中,选择“maven-archetype-webapp”。


    2. 在Pom.xml中添加 Maven 依赖,从而可以使用 Spring和jackson中的特性。如果读者使用的是Dynamic Web Project,可以从Maven仓库下载对的Spring Jar和 jacson jar。


    Spring的Maven仓库地址:http://repo1.maven.org/maven2/org/springframework/

    jackson的Maven仓库地址:http://repo1.maven.org/maven2/com/fasterxml/jackson/core/




  4.0.0
  com.favccxx.favsoft
  favspringmvcrestful
  war
  0.0.1-SNAPSHOT
  favspringmvcrestful Maven Webapp
  http://maven.apache.org
  
  
  	4.1.1.RELEASE
  	2.4.0
  
  
  
    
      junit
      junit
      3.8.1
      test
    
    
    
		org.springframework
		spring-core
		${spring.version}
	
	
		org.springframework
		spring-webmvc
		${spring.version}
	
	
		org.springframework
		spring-beans
		${spring.version}
	
	
		org.springframework
		spring-context
		${spring.version}
	
	
	
	
	  com.fasterxml.jackson.core
	  jackson-core
	  ${jackson.version}
	
	
	  com.fasterxml.jackson.core
	  jackson-annotations
	  ${jackson.version}
	
	
	  com.fasterxml.jackson.core
	  jackson-databind
	  ${jackson.version}
	
	
	
		jstl
		jstl
		1.2
	
	
		taglibs
		standard
		1.1.2
	
    
  
  
    favspringmvcrestful
  


    3.在 web.xml中,配置Spring MVC 4 的DispatcherServlet转发和编码。



	favblog

	
		contextConfigLocation
		
	

	
		encodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			UTF-8
		
		
			forceEncoding
			true
		
	
	
		encodingFilter
		/*
	

	
		org.springframework.web.context.ContextLoaderListener
	

	
		springMVC
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			classpath*:spring-context.xml
		
		1
	
	
		springMVC
		/
	


		
	
	
	
	
    
        
        
        
    


    4.新建 FavUser.java 类,测试JSON与Object之间的映射。需要注意的是,如果想对日期进行格式化,在其Getter方法上,使用 @JsonFormat 即可,这样就能输出符合pattern类型的日期,但是这同时也要求输入的日期参数也必须是pattern类型的。

package com.favccxx.favsoft.favjson.pojo;

import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;

public class FavUser {
	
	private String userId;
	private String userName;
	private int userAge;
	private Date createDate;
	
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public int getUserAge() {
		return userAge;
	}
	public void setUserAge(int userAge) {
		this.userAge = userAge;
	}
	@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
	public Date getCreateDate() {
		return createDate;
	}
	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}
	
	

}

   

    5. 新建FavRestfulController,通过不同的方法测试Spring MVC 4 返回String、Object类型的JSON。

package com.favccxx.favsoft.favjson.controller;

import java.io.IOException;

import org.springframework.web.bind.annotation.RequestBody;
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.RestController;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.favccxx.favsoft.favjson.pojo.FavUser;

@RestController
public class FavRestfulController {
	
	@RequestMapping(value="/getUserName",method=RequestMethod.POST)
	public String getUserName(@RequestParam(value="name") String name){
		return name;
	}
	
	@RequestMapping("getFavUser")
	public FavUser getFavUser(@RequestParam("userName") String userName,String userId,int userAge){
		FavUser favUser = new FavUser();
		favUser.setUserId(userId);
		favUser.setUserName(userName);
		favUser.setUserAge(userAge);
		return favUser;
	}
	
	@RequestMapping("getFavUserBody")
	public FavUser getFavUserBody(@RequestBody String body){
		ObjectMapper mapper = new ObjectMapper();
		FavUser favUser = null;
		try {
			favUser = mapper.readValue(body,  FavUser.class);
		} catch (JsonParseException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return favUser;
	}

}


 6.运行结果如下:

使用Spring MVC 4构建Restful服务_第2张图片

使用Spring MVC 4构建Restful服务_第3张图片