用Srpingmvc 创建RESTful web service

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.
 */
@RestController
public 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>

猜你喜欢

转载自blog.csdn.net/huanghuitan/article/details/71629651