SSM整合系列之 实现RESTFul API

摘要:REST,即Representational State Transfer的缩写。直接翻译的意思是"表现层状态转化"。它是一种互联网应用程序的API设计理念:URL定位资源,用HTTP动词(GET,POST,DELETE,PUT)描述操作。本文将介绍Restful风格API在SSM系统中的使用,我将实现如下几种常用风格的API

  GET    --> /ssm/basicUser/1            查看某个具体的用户
  POST   --> /ssm/basicUser/user         新建一个用户
  PUT    --> /ssm/basicUser/1            更新某个具体的用户
  DELETE --> /ssm/basicUser/1            删除某个具体的用户

在开始实现案例之前简单介绍下相关概念

1. REST原则,围绕资源展开介绍
从资源的定义、获取、表述、关联、状态变迁等角度,列举一些关键概念并加以解释。
(1.1)资源与URI
其实指的就是资源。任何事物,它就是一个资源。资源可以是实体(用户),也可以只是一个抽象概念(例如用户价值)
(1.2)统一资源接口
RESTful架构应该遵循统一接口原则,统一接口包含了一组受限的预定义的操作,不论什么样的资源,都是通过使用相同的接口进行资源的访问。接口应该使用标准的HTTP方法如GET,PUT和POST,并遵循这些方法的语义。
(1.3)资源的表述
接口请求,客户端获取的可以说是资源的表述而已。 资源在外界的具体呈现,可以有多种表述形式,在客户端和服务端之间传送的也是资源的表述,而不是资源本身。 如文本的html、xml、json等格式,图片可以使用PNG或JPG展现出来
(1.4)状态的转移
类似"下一页"之类的链接起的就是这种推进状态的作用——指引你如何从当前状态进入下一个可能的状态

2. SSM系统构建RESTFul API
(2.1)GET 查看用户具体实现

package com.ssm.;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.ssm.entity.BasicUser;
import com.ssm.entity.Page;
import com.ssm.service.BasicUserService;
import com.ssm.util.FinalData;
import com.ssm.util.ResultModel;

/**
 * 用户控制器
 * @author https://blog.csdn.net/caiqing116
 */
@Controller
@RequestMapping("/ssm/basicUser")
public class BasicUserController {
	
	@Autowired 
	private BasicUserService basicUserService;

	/**
	 * 查
	 * @param id 用户id
	 * @return
	 */
	@RequestMapping(value="/{id}", method = RequestMethod.GET)
	@ResponseBody
	public ResultModel selectById(@PathVariable("id")Integer id) {
		BasicUser basicUser = basicUserService.selectById(id);
		return new ResultModel(200, basicUser, "获取成功");
	}
}

(2.2)POST 创建用户具体实现

/**
 * 增
 * @param basicUser 用户对象
 * @return
 */
@RequestMapping(value="/user", method = RequestMethod.POST)
@ResponseBody
public ResultModel insertBasicUser(BasicUser basicUser) {
	int row = basicUserService.insert(basicUser);
	if(row > 0) {
		return new ResultModel(201, row, "新增成功");
	}
	return new ResultModel(200, row, "新增失败");
}

(2.3)PUT更新某个用户实现
对于put和delete请求浏览器form请求时需要在web.xml文件中配置过滤器,在请求时使用POST请求,额外传递参数 _method=“PUT”
form请求例子

<form method="POST" action="<%=request.getServletContext().getContextPath()%>/ssm/basicUser/1">
    <input type="hidden" name="_method" value="PUT">
    <p>姓名:</p><input type="text" name="username" /><br/>
    <p>真实姓名:</p><input type="text" name="realname" /><br/>
    <button type="submit">提交</button>
</form>

配置过滤器HiddenHttpMethodFilter

<!-- 配置过滤器 将POST请求转换为PUT和DELETE请求 -->
  <filter>
      <filter-name>HiddenHttpMethodFilter</filter-name>
      <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
      <filter-name>HiddenHttpMethodFilter</filter-name>
      <url-pattern>/*</url-pattern>
</filter-mapping>

更新某个用户实现

 * 改
 * @param id 用户id
 * @param realname 用户真实姓名
 * @return
 */
@RequestMapping(value="/{id}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel updateById(@PathVariable("id")Integer id, String realname) {
	BasicUser basicUser = new BasicUser();
	basicUser.setId(id);
	basicUser.setRealname(realname);
	int row = basicUserService.updateById(basicUser);
	if(row > 0) {
		return new ResultModel(201, row, "更新成功");
	}
	return new ResultModel(200, row, "更新失败");
}

(2.4)DELETE删除用户具体实现
在请求时使用POST请求,额外传递参数 _method=”DELETE"
form请求示例如下:

<form method="POST" action="<%=request.getServletContext().getContextPath()%>/ssm/basicUser/1">
    <input type="hidden" name="_method" value="DELETE">
    <button type="submit">提交</button>
</form>

接口实现如下:

/**
 * 删
 * @param id 用户id
 * @return
 */
@RequestMapping(value="/{id}", method = RequestMethod.DELETE)
@ResponseBody
public ResultModel deleteById(@PathVariable("id")Integer id) {
	int row = basicUserService.deleteById(id);
	if(row > 0) {
		return new ResultModel(200, row, "删除成功");
	}
	return new ResultModel(404, row, "删除失败");
}

3. 状态码总结

GET状态码

200(OK) - 表示已在响应中发出
204(无内容) - 资源有空表示
301(Moved Permanently) - 资源的URI已被更新
303(See Other) - 其他(如,负载均衡)
304(not modified)- 资源未更改(缓存)
400 (bad request)- 指代坏请求(如,参数错误)
404 (not found)- 资源不存在
406 (not acceptable)- 服务端不支持所需表示
500 (internal server error)- 通用错误响应
503 (Service Unavailable)- 服务端当前无法处理请求

POST状态码

200(OK)- 如果现有资源已被更改
201(created)- 如果新资源被创建
202(accepted)- 已接受处理请求但尚未完成(异步处理)
301(Moved Permanently)- 资源的URI被更新
303(See Other)- 其他(如,负载均衡)
400(bad request)- 指代坏请求
404 (not found)- 资源不存在
406 (not acceptable)- 服务端不支持所需表示
409 (conflict)- 通用冲突
412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)
415 (unsupported media type)- 接受到的表示不受支持
500 (internal server error)- 通用错误响应
503 (Service Unavailable)- 服务当前无法处理请求

PUT状态码

200 (OK)- 如果已存在资源被更改
201 (created)- 如果新资源被创建
301(Moved Permanently)- 资源的URI已更改
303 (See Other)- 其他(如,负载均衡)
400 (bad request)- 指代坏请求
404 (not found)- 资源不存在
406 (not acceptable)- 服务端不支持所需表示
409 (conflict)- 通用冲突
412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)
415 (unsupported media type)- 接受到的表示不受支持
500 (internal server error)- 通用错误响应
503 (Service Unavailable)- 服务当前无法处理请求

DELETE状态码

200 (OK)- 资源已被删除
301 (Moved Permanently)- 资源的URI已更改
303 (See Other)- 其他,如负载均衡
400 (bad request)- 指代坏请求
404 (not found)- 资源不存在
409 (conflict)- 通用冲突
500 (internal server error)- 通用错误响应
503 (Service Unavailable)- 服务端当前无法处理请求

4 利用Postman测试接口功能
测试新增接口
在这里插入图片描述
测试查询接口
在这里插入图片描述
测试修改接口
在这里插入图片描述
再调用下查询接口验证
在这里插入图片描述
测试删除接口
在这里插入图片描述
再调用下查询接口验证,如下data为空说明删除成功
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值