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

    写在前面的话

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

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

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

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

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

    perfect-ssm

    接口设计

    项目共有三个模块:

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

    针对以上三个模块,并结合前文《设计一套好的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包,其中的工具类规定了返回状态码及返回数据的基本格式。 common

    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搭建精美实用的管理系统

    gitchat

    首发于我的个人博客,新的项目演示地址:perfect-ssm,用户名:admin,密码:123456。 如果有问题或者有一些好的创意,欢迎给我留言,也感谢向我指出项目中存在问题的朋友,本篇主要讲述了后端的实现,关于前端的修改会在下一篇文章中讲述。

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

  • 相关阅读:
    CSS 两个行内块元素,宽度相加刚好等于父盒子容器的元素,但第二个元素掉在第二行解决办法
    js 自定义获得类class和获得id
    学习笔记:BSGS(拔山盖世?)算法
    解题报告: luogu P1040
    解题报告:SP18155 ABSP1
    解题报告:luogu P1099
    Thussat 游记
    解题报告:luogu P2220
    学习笔记:卢卡斯定理(并没有学会)
    从线性筛到欧拉函数,你十有八九能懂吧!
  • 原文地址:https://www.cnblogs.com/yelanggu/p/10138238.html
Copyright © 2011-2022 走看看