你的位置:首页 > Java教程

[Java教程]优雅的SpringMVC和Restful

一.前言

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

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

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

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

image

image

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

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

二.实现

1.jar包导入

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

image

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

2.项目结构搭建:

首先在src下添加

<??><beans ="http://www.springframework.org/schema/beans" ="http://www.w3.org/2001/ ="http://www.springframework.org/schema/context" ="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans    >>  <!-- 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.

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

然后我们看这行

image

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

下面开始建包,还记得

image

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

image

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

3.编写代码:

首先开始撸MyController:

image

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

image

image

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

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

可以看到,我刚刚的请求

而不 title="image" border="0" alt="image" src="http://images2017.cnblogs.com/blog/565256/201708/565256-20170831173502624-731554257.png" width="422" height="89">

最后的return “hello”;

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

我们测试一下:

image

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

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

image

先创建一个Person:

image

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

最后我们测试一下:

image

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

控制台也输出了:image

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

3.Restful登场

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

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

image

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

image

可以看到,这个请求url是 title="image" border="0" alt="image" src="http://images2017.cnblogs.com/blog/565256/201708/565256-20170831173508577-494152683.png" width="479" height="107">

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

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

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

image

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

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

4.json加盟

新建一个controller:image

这样写道:image

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

image

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

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

 

image

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

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

image

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

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

三.结语

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