您的位置:首页 > 其它

用Srpingmvc 创建RESTful web service

2017-05-11 14:38 204 查看
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.
*/
@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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  RESTful