使用SpringMVC4构建Restful服务

使用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


    工程目录如下:









    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/

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.0http://maven.apache.org/maven-v4_0_0.xsd">
  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转发和编码。




    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    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
        /
   








    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.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/s ... ing-context-4.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
         
   
     
   
     
   
        
            value="org.springframework.web.servlet.view.JstlView" />
        
        
   



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.运行结果如下:

你可能感兴趣的:(springmvc)