优雅的SpringMVC和Restful

一.前言

1.前段时间一直在写微信小程序的请求,终于把客户端的请求弄好了,可是服务端呢,该怎么写,纠结了半天,用servlet暂时写好了一个:http://www.cnblogs.com/JJDJJ/p/7299274.html

我们看一下整体代码: 当然这下面还有一大串。。

有没有发现,这些代码非常乱,以至于现在的我看着脑儿疼。

2.后来想着用API的那种形式写一个服务端,小程序这边post过去json格式数据,然后服务端获取json,接着对数据进行操作,最后返回结果就行了。类似百度外卖API这样的:

可以看到,在request和response中的json数据非常优雅。

那么我们怎么写出这样优雅的API服务端给客户端调用呢。终于找到了一个比较好的实现方式:Restful

二.实现

1.jar包导入

我们现在从零开始,首先创建一个project,然后导入jar包:

这些在后面的操作全部都用到,所以全都导进去好了。CSDN上这些资源应该烂大街的。

2.项目结构搭建:

首先在src下添加xml:springmvc-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"
    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-4.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
     <!-- scan the package and the sub package -->
    <context:component-scan base-package="com.restful"  />
    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
     <!-- don‘t handle the static resource -->
    <mvc:default-servlet-handler/>
    <!-- if you use annotation you must configure following setting -->
    <mvc:annotation-driven/>
</beans>

接着在web.xml里面添加:

<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:springmvc-servlet.xml</param-value>
        </init-param>
        <!-- 配置 DispatcherServlet 的一个初始化参数: 配置 SpringMVC 配置文件的位置和名称 -->
        <!-- 实际上也可以不通过 contextConfigLocation 来配置 SpringMVC 的配置文件, 而使用默认的. 默认的配置文件为:
            /WEB-INF/<servlet-name>-servlet.xml -->
        <!-- <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet2.xml</param-value>
            </init-param> -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

然后我们看这行xml配置,需要配置视图解析器,在WEB-INF下创建jsp文件夹用,来存放jsp资源,当然可以是其他名称,只不过你的配置和目录要一致

接着在jsp文件夹里面创建一个hello.jsp文件,老规矩,在页面上写上hello world   :D

下面开始建包,还记得xml配置了这句吗

他需要扫描com.restful包,所以我们新建一个,然后再在这个包里新建一个Controller。

这样差不多项目结构就搭建好了

3.编写代码:

首先开始撸MyController:

@Controller 的意思是注册一个bean到spring容器中,让spring容器知道,你这个类是个控制器,如果没有这个注解,会报404,我们用postman(一个发送请求工具,可以百度)测试发现:

就算你写了URL映射也是一样

下面看一下@RequestMap注解,这个注解就是URL映射了:.

可以看到,我刚刚的请求是http://localhost:6789/RestFul/mvc/xxx/xxx

而不是http://localhost:6789/RestFul/mvb或者http://localhost:6789/RestFul/mvd

这个URL取决于这个注解里的值。写错了一样报404。

接着是方法上面的Mapping,同理,这边写什么,请求的url就是什么,我这里写了一个/hello,请求就是:

http://localhost:6789/RestFul/mvc/hello

接着看这个方法里面,有两个参数,你可以试试请求url:

http://localhost:6789/RestFul/mvc/hello?name=zjj&age=20和http://localhost:6789/RestFul/mvc/hello?name=adminj&age=233

分别输出了什么,上面操作没问题应该输出这个:

最后的return “hello”;

则是返回的视图的名字,还记得之前配置视图解析器的时候吗,前缀是WEB-INF/jsp,后缀就是.jsp。那么中间部分jsp的名字呢,就是这个hello,连起来就是hello.jsp

我们测试一下:

可以看到输入这个url后直接跳转到了之前创建的hello.jsp。

那么问题来了,这个url利用?拼接的参数,那我们需要获取一个对象的时候该怎么办呢,别担心,把方法的参数设成一个实体类,他会自动帮你装箱:

先创建一个Person:

接着是在hello.jsp同目录下创建一个Person.jsp

最后我们测试一下:

这里参数对应了Person类里的属性

控制台也输出了:

可以看到,这个方法的参数,变成了一个对象,你在url中用&拼接参数的话,只要参数和属性对应,他就会自动帮你装箱。

3.Restful登场

上面只是spring mvc的简单应用,当然我们为了完成目标:API服务端 是不够的。我们还需要用restful。

新建一个RestController控制器,再写一个post方法:

这个@PathVariable的意思就是动态的获取请求url中的参数,比如我现在用工具发一个post请求:

可以看到,这个请求url是:http://localhost:6789/RestFul/rest/user/1

可以看到,这个请求的状态:

是成功的,我们再看一下控制台输出:

成功输出了方法名和传入的ID参数

当然,restful包括其他几种请求方式,比如GET/DELETE/PUT 这里就不一一举例,可以自己写几个然后用postman测试,这里有许多不同的请求方式:

(网页中输入url的方式是GET)

恭喜,到这里已经简单的入门了,但是我们还不够。我们的目标中,还有一个重要的东西:json数据的传输

4.json加盟

新建一个controller:

这样写道:

这里直接return p,刚开始你会觉得很奇怪,但是你测试一下:

嗯,很强大,直接return 了一个json格式数据。

那我们要是post一个json格式数据过去,应该怎么做呢?继续写道:

这里,我们添加了一个参数,是User类,前面有一个@RequestBody注解,这个注解就是用来接受json数据的

然后返回一个map类型的数据,你会发现测试的结果,神奇的非常优雅:

可以看到,我们post了一组json数据,其中name和id必须和User类里的属性对应,少字段没事,只会显示null或者0,比如上面的birth,我在post的时候就没有这个字段,他这里就直接显示null了,不能错,错了回直接报400.

(玩过json转Obj或者Obj转json的朋友应该知道,在转换类里实现了序列化后还需要把json的字段和Obj的属性对应,不然回出错)

三.结语

到此,基本上我们的目标实现的差不多了,接受json和返回数据都实现了,用了spring mvc和restful,而不是servlet,剩下的处理逻辑,这里就不赘述了。希望这篇文章对新人有所帮助吧。

时间: 2024-07-31 03:52:06

优雅的SpringMVC和Restful的相关文章

springmvc的RESTful风格

springmvc对RESTful得支持RESTful架构,就是目前最流行得一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以挣得到越来越多网站的采用. RESTful(即Representational State Transfer变现层状态转换)其实是一个开发理念,是对http 的很好的诠释. 状态转换(State Transfer) 客户端用到的手段,只能是HTTP协议.具体来说就是HTTP协议里面四个表示操作方式的动词:GET/POST/PUT/DELETE,分别对应四中

[手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路

来源于:http://www.jianshu.com/p/5124eef40bf0 [手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路 手把手教你整合最优雅SSM框架:SpringMVC + Spring + MyBatis 前面网友说我为啥很久不更新博客了,我告诉他们我准备潜修.其实是我的博客被人批评是在记流水账(~一脸尴尬~). 再次安利一波,博客地址:acheng1314.cn 本文中的图片用了个人服务器存储,网速较慢,各位老司机耐心等待. 工具 IDE为id

maven+SpringMVC搭建RESTful后端服务框架

今天来尝试一下搭建基于SpringMVC的RESTful标准的后端服务. 首先,什么是MVC?M-model,模型,指业务数据层,具体一点就是业务逻辑与数据库的交互:V-view,视图,用来展示数据,传统SpringMVC中控制器有返回类型ModelAndView,即返回含有数据模型与页面视图的jsp文件:C-controller,控制器,通常负责处理与用户间的交互,控制从数据库取数与返回结果到用户等. 那么,什么是REST风格的服务呢?REST(Representational State T

SpringMVC实现Restful风格的WebService

1.环境 JDK7 MyEclipse2014 tomcat8 maven 3.3.3 spring4.1.4 2.创建maven工程 使用MyEclipse创建maven工程的方式可以参考这篇博文(链接1), 该博文中的第四小结是关于如何创建SpringMVC+maven教程.下面只给出创建好的目录结构,其中的部分文件如java程序是后面要完成的. 3.指定依赖文件 maven具有特定的文件结构,并通过pom.xml来管理工程.下面是在实现Restful时需要的依赖. 1 <project x

Springmvc构造RESTful详细讲解

/blog/1 HTTP GET => 得到id = 1的blog/blog/1 HTTP DELETE => 删除 id = 1的blog/blog/1 HTTP PUT => 更新id = 1的blog/blog HTTP POST => 新增BLOG 以下详细解一下spring rest使用. 首先,我们带着如下两个问题查看本文. 1.如何在java构造没有扩展名的RESTful url,如 /forms/1,而不是 /forms/1.do 2.浏览器的form标签不支持提交

SpringMVC构建Restful。

因为spring是依赖jackson来生成json,需要添加jar包. pom.xml文件添加依赖. <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <dependency>

SpringMVC&ndash;SSH -- RESTful -- JSR303

最近在使用SpringMVC+MyBatis感觉用起来效果很好.我不太明白SpringMVC和SSH的关系,遂搜索了一下.原来使用SpringMVC之后,可以替代之前的SSH这种开发模式. 附上知乎链接:https://www.zhihu.com/question/22014461 然后看到RESTful风格和JSR 303 之前指导RESTful风格,但是一直不知道此物为何物.今天研究了一下,附上两个链接: http://bbs.csdn.net/topics/390908212 http:/

SwaggerUI+SpringMVC——构建RestFul API的可视化界面

今天给大家介绍一款工具,这个工具目前可预见的好处是:自动维护最新的接口文档. 我们都知道,接口文档是非常重要的,但是随着代码的不断更新,文档却很难持续跟着更新,今天要介绍的工具,完美的解决了这个问题.而且,对于要使用我们接口的人来说,不需要在给他提供文档,告诉他地址,一目了然. 最近项目中一直有跟接口打交道,恰好又接触到了一个新的接口工具,拿出来跟大家分享一下. 关于REST接口,我在上篇文章中已经有介绍,这里来说一下如何配合SwaggerUI搭建RestFul API 的可视化界面.最终要达到

SpringMVC之Restful

Spring MVC本身对Restful支持非常好.它的@RequestMapping.@RequestParam.@PathVariable.@ResponseBody注解很好的支持了REST. 1. @RequestMapping @RequestMapping 方法注解指定一个请求的URI映射地址. 类似于struts的action-mapping,同时可以指定POST或者GET请求类型. @RequestMapping("/owners/{ownerId}", method=R