SSM整合系列之 实现RESTFul API

版权声明:如需转载,请注明出处。 https://blog.csdn.net/caiqing116/article/details/85146823

摘要: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.controller;

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请求需要在web.xml文件中配置过滤器,在请求时使用POST请求,额外传递参数 _method=”PUT"

<!-- 配置过滤器 将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"

/**
 * 删
 * @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错误码

扫描二维码关注公众号,回复: 4664398 查看本文章
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)- 服务端当前无法处理请求

猜你喜欢

转载自blog.csdn.net/caiqing116/article/details/85146823