用Srpingmvc 创建RESTful web service

来源:互联网 发布:全球地名数据库 编辑:程序博客网 时间:2024/05/22 10:39

Spring Doc:https://docs.spring.io/spring/docs/current/spring-framework-reference/html/index.html 
RESTful介绍:http://www.ruanyifeng.com/blog/2014/05/restful_api.html

xml中sping相关配置

 <context-param>    <param-name>contextConfigLocation</param-name>    <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>  </context-param>  <filter>    <filter-name>Encoding</filter-name>    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>    <init-param>      <param-name>encoding</param-name>      <param-value>utf8</param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>Encoding</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>  <servlet>    <servlet-name>dispatcher</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <init-param>      <param-name>contextConfigLocation</param-name>      <param-value></param-value>    </init-param>    <load-on-startup>1</load-on-startup>  </servlet>  <servlet-mapping>    <servlet-name>dispatcher</servlet-name>    <url-pattern>/</url-pattern>  </servlet-mapping>   <listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>  <listener>    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>  </listener>

dispatcher-servlet.xml 配置

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    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"    xmlns:cache="http://www.springframework.org/schema/cache"    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/schema/context/spring-context.xsd    http://www.springframework.org/schema/mvc    http://www.springframework.org/schema/mvc/spring-mvc.xsd    http://www.springframework.org/schema/cache    http://www.springframework.org/schema/cache/spring-cache.xsd">    <!-- 自动扫描包,实现支持注解的IOC -->    <context:component-scan base-package="net.mfinance"/>    <!-- 支持mvc注解驱动 -->    <mvc:annotation-driven />    <!-- 视图解析器 -->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <!-- 前缀 -->        <property name="prefix" value="/WEB-INF/pages/" />        <!-- 后缀 -->        <property name="suffix" value=".jsp" />        <property name="contentType" value="text/html;charset=UTF-8"/>        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>    </bean>    <mvc:default-servlet-handler />    <!--<mvc:resources mapping="/resources/**" location="/resources/" cache-period="31556926"/>--></beans>

@RestController

package net.mfinance.controllers;import com.fasterxml.jackson.annotation.JsonView;import net.mfinance.entities.UserEntity;import org.springframework.web.bind.annotation.*;import java.util.ArrayList;import java.util.List;/** * Created by Caspar on 17/5/5. */@RestControllerpublic class UserConroller {    @PutMapping("/user/{account}")    public Object put(@PathVariable String account){        return new UserEntity(1,1+account,1+"pwd");    }    @PatchMapping("/user/{account}")    public Object patch(@PathVariable String account){        return new UserEntity(1,1+account,1+"pwd");    }    @DeleteMapping("/user/{account}")    public Object deete(@PathVariable String account){        return new UserEntity(1,1+account,1+"pwd");    }    // GET /pets/42;q=11;r=22    // @MatrixVariable(name="q", pathVar="ownerId") int q1,    @GetMapping(value = "/user")    @JsonView(UserEntity.WithPasswordView.class)    public Object get(@RequestParam(value = "limit",defaultValue = "10") int limit,                      @RequestParam(value = "offset",defaultValue = "0") int offset,                      @RequestParam(value = "sortby",defaultValue = "id") String sortby,                      @RequestParam(value = "order",defaultValue = "asc") String order){        List<UserEntity> list = new ArrayList<UserEntity>();        for (int i = offset; i <limit ; i++) {            list.add(new UserEntity(i,"user "+i+" sortby "+sortby+" order "+order,i+"pwd"));        }        return list;    }    @GetMapping(value = "/user/{account}")    @JsonView(UserEntity.WithPasswordView.class)    public Object get(@PathVariable String account){        return new UserEntity(1,account,"pwd");    }}

UserEntity

public class UserEntity {    public interface WithoutPasswordView {};    public interface WithPasswordView extends WithoutPasswordView {};    private int id;    private String name;    private String pwd;    private List<String> hobbyList;    public UserEntity(int id, String name, String pwd) {        this.id = id;        this.name = name;        this.pwd = pwd;        hobbyList = new ArrayList<>();        hobbyList.addAll(Arrays.asList(new String[]{"aaa","bb","cc"}));    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    @JsonView(WithoutPasswordView.class)    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @JsonView(WithPasswordView.class)    public String getPwd() {        return pwd;    }    public void setPwd(String pwd) {        this.pwd = pwd;    }    public List<String> getHobbyList() {        return hobbyList;    }    public void setHobbyList(List<String> hobbyList) {        this.hobbyList = hobbyList;    }}

JSP页面代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%    String path = request.getContextPath();    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path ;%><!DOCTYPE html><html lang="zh-cn"><head>    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <script src="<%=basePath%>/resources/js/jquery-2.1.4.min.js"></script>    <title></title>    <script type="text/javascript">        $().ready(function(){            $.ajax({                url: "<%=basePath%>/user/caspar",                type:"PUT"            }).done(function(data) {                $("#contents").append("<span>put "+data['name']+"</span><br></br>");            });            $.ajax({                url: "<%=basePath%>/user/caspar",                type:"PATCH"            }).done(function(data) {                $("#contents").append("<span>update "+data['name']+"</span><br></br>");            });            $.ajax({                url: "<%=basePath%>/user/caspar",                type:"DELETE"            }).done(function(data) {                $("#contents").append("<span>delete "+data['name']+"</span><br></br>");            });            $.ajax({                url: "<%=basePath%>/user/caspar",                type:"GET"            }).done(function(data) {                $("#contents").append("<span>get "+data['name']+"</span><br></br>");            });            $.ajax({                url: "<%=basePath%>/user?limit=10&sortby=name&order=asc",                type:"GET"            }).done(function(data) {                for(var i=0; i<data.length; i++) {                    $("#contents").append("<span>list "+i+": "+data[i]['name']+"</span><br></br>");                }            });        })    </script></head><body><h1>Hello ${name} !</h1><div id="contents"></div></body></html>
0 0