优雅的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,剩下的处理逻辑,这里就不赘述了。希望这篇文章对新人有所帮助吧。
优雅的SpringMVC和Restful的更多相关文章
- SpringMVC实现RESTful服务
SpringMVC实现RESTful服务 这里只说service,controller层的代码.Mapper层则直接继承Mapper<T>则可以,记住mybatis-config.xml一 ...
- 基于springMVC的RESTful服务实现
一,什么是RESTful RESTful(RESTful Web Services)一种架构风格,表述性状态转移,它不是一个软件,也不是一个标准,而是一种思想,不依赖于任何通信协议,但是开发时要成功映 ...
- [手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路
来源于:http://www.jianshu.com/p/5124eef40bf0 [手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路 手把手教你整合最优雅SSM框架:S ...
- springmvc的RESTful风格
springmvc对RESTful得支持RESTful架构,就是目前最流行得一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以挣得到越来越多网站的采用. RESTful(即Repres ...
- 基于 springMVC 的 RESTful HTTP API 实践(服务端)
理解 REST REST(Representational State Transfer),中文翻译叫"表述性状态转移".是 Roy Thomas Fielding 在他2000年 ...
- SpringMVC 使用 RESTful 架构实现 CRUD 操作
软件152 余建强 源码下载:http://download.csdn.net/detail/qq_35318576/9826210 1 使用框架 SpringMVC.Maven.Ajax.JSTL. ...
- spring 3.0 应用springmvc 构造RESTful URL 详细讲解
在线springmvc_rest demo 由于下一版本的rapid-framwork需要集成spring RESTful URL,所以研究了一下怎么搭建. 并碰到了一下问题. springmvc 3 ...
- springMVC学习--RESTful支持
简介 RESTful架构,就是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用.RESTful(即Representational State T ...
- SpringMVC实现Restful风格的WebService
1.环境 JDK7 MyEclipse2014 tomcat8 maven 3.3.3 spring4.1.4 2.创建maven工程 使用MyEclipse创建maven工程的方式可以参考这篇博文( ...
随机推荐
- 51nod 1486 大大走格子(容斥+dp+组合数)
传送门 解题思路 暴力容斥复杂度太高,无法接受,考虑用\(dp\).设\(f(i)\)表示从左上角开始不经过前面的阻断点,只经过\(i\)的阻断点.那么可以考虑容斥,用经过\(i\)的总方案数减去前面 ...
- iPad如何恢复
iPad在有网络连接的情况下,可以通过iCloud进行恢复. 没有连接WiFi的情况下,只能通过USB连接才能恢复. ①下载最新版本的iTunes:https://support.apple.com/ ...
- python的列表 元组 字典
列表和元组都是序列,是数据元素的集合,数据元素可以是数值.字符串,布尔值.对象等. 一.列表:用方括号定义[] 空列表 names = [] 带值的列表 names = ["bill&quo ...
- 使用命令将ipa包上传到蒲公英
参考:官文文档 请根据开发者自己的账号,将其中的 uKey 和 _api_key 的值替换为相应的值. curl -F "file=@/Users/chenpeisong/Desktop ...
- Spring中ApplicationContext加载机制和配置初始化
Spring中ApplicationContext加载机制. 加载器目前有两种选择:ContextLoaderListener和ContextLoaderServlet. ...
- 将windows下的文件上传到Linux服务器上
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lx_Frolf/article/deta ...
- vue-router 传递参数的几种方式
本文转载自:https://blog.csdn.net/crazywoniu/article/details/80942642 vue-router传递参数分为两大类 编程式的导航 router.pu ...
- web自动化,selenium 无法清空输入框默认值继续输入
有的页面输入框自带默认值,想要修改里面的内容时,先使用clear()再send_keys(),这种方式无法清除只会在默认值后面追加内容,不是我想要的结果 解决方法: 方法一: 先双击,后直接send_ ...
- 使用 内置函数strtok()函数实现 loadrunner 字符串替换
Action(){ /* loadrunner 字符串替换 */ char separators[] = "/"; char * token; char * file_path; ...
- 各种Web服务器与Nginx的对比
Tomcat和Jetty面向Java语言,先天就是重量级的Web服务器,它们的性能与Nginx没有可比性. IIS只能在windows操作系统上运行,Windows作为服务器在稳定性与其他一些性能上都 ...
当然这下面还有一大串。。








.














