Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)

Stella981
• 阅读 467

写在前面的话

原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做:

  • 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的。

  • 而且这次的代码改动较大,与原来的目录结构及代码风格相比都有很大的差别。

  • 同时也考虑到不同的人所处的学习阶段不同,担心有人不习惯也不适应这种风格及后面的更新,有的朋友甚至可能是初学者,更适合学习ssm-demo这个基础项目。

基于以上几点,最终并没有选择把几个项目都放在一个代码仓库中,而是另外花了些时间改动并且重新创建了一个仓库,perfect-ssm另起炉灶,项目也在新的服务器和域名下部署。

Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)

接口设计

项目共有三个模块:

  • 文章管理模块
  • 图片管理模块
  • 用户管理模块

针对以上三个模块,并结合前文《设计一套好的RESTful API》中所总结的RESTful API设计原则,对api进行改造,目标接口如下:

图片上传:
原接口 []      http://ssm-demo.13blog.site/loadimage/upload.do
现接口 [POST]  http://perfect-ssm.13blog.site/images 文章添加: 原接口 [] http://ssm-demo.13blog.site/article/save.do 现接口 [POST] http://perfect-ssm.13blog.site/articles 文章修改: 原接口 [] http://ssm-demo.13blog.site/article/save.do 现接口 [PUT] http://perfect-ssm.13blog.site/articles 文章列表: 原接口 [] http://ssm-demo.13blog.site/article/list.do 现接口 [GET] http://perfect-ssm.13blog.site/articles 文章删除: 原接口 [] http://ssm-demo.13blog.site/article/delete.do 现接口 [DELETE]http://perfect-ssm.13blog.site/articles 图片添加: 原接口 [] http://ssm-demo.13blog.site/picture/save.do 现接口 [POST] http://perfect-ssm.13blog.site/pictures 图片修改: 原接口 [] http://ssm-demo.13blog.site/picture/save.do 现接口 [PUT] http://perfect-ssm.13blog.site/pictures 图片列表: 原接口 [] http://ssm-demo.13blog.site/picture/list.do 现接口 [GET] http://perfect-ssm.13blog.site/pictures 图片删除: 原接口 [] http://ssm-demo.13blog.site/picture/delete.do 现接口 [DELETE]http://perfect-ssm.13blog.site/pictures 用户登录: 原接口 [] http://ssm-demo.13blog.site/user/login.do 现接口 [POST] http://perfect-ssm.13blog.site/users/cookie 用户列表: 原接口 [] http://ssm-demo.13blog.site/user/list.do 现接口 [GET] http://perfect-ssm.13blog.site/users 用户删除: 原接口 [] http://ssm-demo.13blog.site/user/delete.do 现接口 [DELETE]http://perfect-ssm.13blog.site/users 用户添加: 原接口 [] http://ssm-demo.13blog.site/user/save.do 现接口 [POST] http://perfect-ssm.13blog.site/users 修改密码: 原接口 [] http://ssm-demo.13blog.site/user/modifyPassword.do 现接口 [PUT] http://perfect-ssm.13blog.site/users

根据不同资源映射成不同的uri,对于资源的具体操作类型,由HTTP动词来表示。

java后端实现

前文中提到了一些设计原则,这一篇就是将这些原则运用到项目中,但是理论性的知识看看就忘了,我写博客的目的不是为了写理论概念,没有实际项目配合我是不会写的,我觉得通过代码实现出来,配合实战才能让理论知识吸收的更好。

由于是ssm项目,因此主要是通过SpringMVC实现,更多的是使用了SpringMVC的注解来进行简化开发。

整合过程:

  • 首先是修改web.xml配置文件,使得URI可以符合RESTful风格。

    <servlet>
        <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-context-mvc.xml</param-value> </init-param> <!--加载顺序为1 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
    
  • 修改spring-context-mvc.xml配置文件,配置json消息转换器及动态资源过滤。

    <!-- Start: 配置json消息转换器 & 参数解析-->
    <bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="dateFormat"> <bean class="java.text.SimpleDateFormat"> <constructor-arg index="0" type="java.lang.String" value="yyyy-MM-dd HH:mm:ss"/> </bean> </property> </bean> <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json; charset=UTF-8</value> </list> </property> <property name="prettyPrint" value="true"/> <property name="objectMapper" ref="objectMapper"/> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- End: 配置json消息转换器 & 参数解析 --> <!-- 使用了<url-pattern>/</url-pattern>,所以要对静态资源进行处理 --> <mvc:default-servlet-handler/> <!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- --> <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="1"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="contentType" value="text/html"/> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".jsp"/> </bean>
    
  • @RequestMapping注解,规范和限制Http请求的请求方法。

    @RequestMapping(value = "", method = RequestMethod.PUT)

    @RequestMapping(value = "/{ids}", method = RequestMethod.DELETE)

  • @ResponseBody注解,将返回结果转换为JSON格式。

  • 增加common包,其中的工具类规定了返回状态码及返回数据的基本格式。 Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)

    public class Constants {

    public static final int RESULT_CODE_SUCCESS = 200; // 成功处理请求 public static final int RESULT_CODE_BAD_REQUEST = 412; // bad request public static final int RESULT_CODE_SERVER_ERROR = 500; // 没有对应结果 } public class Result<T> implements Serializable { private static final long serialVersionUID = 1L; private int resultCode; private String message; private T data; public Result() { } }
    

注意事项

几个需要注意的注解:

  • @RequestMapping
  • @PathVariable
  • @ResponseBody
  • @RequestParam

代码中大量的出现,本文中也一再强调,因此,给正在看本篇文章的你一个建议就是如果你不熟悉这几个注解,花点时间去认真学习和实践一下,知道这几个注解的用法和注意事项,网上针对这些注解的文章有很多,可以针对性的学习一下,这篇文章就不再占用篇幅去赘述了,需要代码的话,直接去我的GitHub仓库中去下载就好。

结语

推荐一下自己的达人课,感兴趣的朋友可以看一下:SSM搭建精美实用的管理系统

首发于我的个人博客,新的项目演示地址:perfect-ssm,用户名:admin,密码:123456。 Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现) 如果有问题或者有一些好的创意,欢迎给我留言,也感谢向我指出项目中存在问题的朋友,本篇主要讲述了后端的实现,关于前端的修改会在下一篇文章中讲述。

如果你想继续了解该项目可以查看整个系列文章Spring+SpringMVC+MyBatis+easyUI整合系列文章,也可以到我的GitHub仓库或者开源中国代码仓库中查看源码及项目文档。

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Maven第四篇【私有仓库、上传jar包、引用私服jar包、上传本地项目到私服】
搭建私有服务器前面已经说过了,我们使用Maven的使用,如果需要导入相对应的jar包,Maven首先会在我们的本地仓库中寻找—私有仓库—中心仓库…然而,我们的本地仓库常常没有想要的jar包的,而经常去中心仓库下载这就非常浪费时间和资源了…因此我们一般都有一个私有仓库…另外有些公司都不提供外网给项目组人员,因此就不能使用mave
Stella981 Stella981
3年前
Git提交本地库代码到远程服务器的操作
在本地磁盘创建目录mkdirpath进入所创建的目录cdpathgitinit添加远程仓库的代码gitremoteaddorigingit@xbc.me:wordpress.git设置Gitgitconfigglobaluser.name"your_name"
Stella981 Stella981
3年前
Jenkins + Gogs 搭建DevOps环境
Gogs:1\.安装过程中,对外访问URL可配置公网IP地址:端口号,因为这个选项会影响未来git仓库的地址。2\.新建好仓库后,如果想实现提交代码后自动触发编译,则需要配置对应代码仓库的Webhook:仓库设置管理Web钩子AddanewWebhookGogs推送地址:http://Jenkins服务器地址/gogswe
Stella981 Stella981
3年前
Git学习
已有项目添加到Git操作流程:1.在一个目录下执行gitinit,会将当前目录创建为git仓库gitinit2.执行gitadd.把当前目录下所有文件添加到仓库gitadd.3.把添加的文件提交到本地仓库gitcommitm'Firstcommit'4.添加remote及验证remote。
Wesley13 Wesley13
3年前
vscode中上传代码到github
1.vscode中上传代码到github1可以去github新建一个仓库,已经创建好的仓库有如下命令!(https://oscimg.oschina.net/oscnet/3037b8401b71f15936212a8213b23530e01.png) 2在终端中打开文件的根目录输入gitinit该命令用于初始化仓库
Wesley13 Wesley13
3年前
oracle事务的四个特性(ACID)
事务产生的背景当在PL/SQL中同时操作多个SQL语句,比如通过DML语句添加、修改或删除数据时,如何确保数据库数据不会因为意外而倒置错误数据是一个非常重要的问题。以仓库发料系统为例,如果某一张领料单已经领了料,那么仓库中的物料就要减少,如果因为某些意外的原因,只是领料单的料数多了,而仓库中的物料没有减少,就会造成数据错误,使得整个仓库库管理
Wesley13 Wesley13
3年前
4、界面前端设计师要阅读的书籍
  前端工程师原来的职位是美工,原来只负责项目的一些简单网页制作,因为项目的需要,升级为前端工程师,这就涉及到JS等代码的编写了。前端工程师这个职位在目前来说算是新兴职位,在未来的几年里也是挺吃香的一个职位。  前端工程师要阅读的书籍不怎么多,但是也会涉及到前端代码的编写,比如JS。所以前端工程师也要阅读JS方面的书籍,当然要包括任何前端相关的书籍,在移
Wesley13 Wesley13
3年前
git ignore files配置
方式一在仓库目录下新建一个名为.gitignore的文件(因为是点开头,没有文件名,没办法直接在windows目录下直接创建,必须通过右键GitBash,按照linux的方式来新建.gitignore文件)。.gitignore文件对其所在的目录及所在目录的全部子目录均有效。通过将.gitignore文件添加到仓库,其他开发者更新该文件到
Stella981 Stella981
3年前
GitFlow原理浅析
一、Git优点分布式存储,本地仓库包含了远程仓库的所有内容.安全性高,远程仓库文件丢失了也不怕优秀的分支模型,创建/合并分支非常的方便方便快速,由于代码本地都有存储,所以从远程拉取和分支合并时都非常快捷当分支过多时,如何管理这些分支呢?我们团队采用了GitFlow的模式