在以前咱们使用Swift的Perfect框架来开发服务端程序时,聊到了Perfect中的路由配置。而在SpringMVC中的路由配置与其也是大同小异的。说到路由,其实就是将URL映射到Java的具体类中的具体方法,或者映射到具体的JSP文件上。本篇博客主要就阐述了如何在SpringMVC中配置路由以及REST配置。下方将会聊到路由到JSP文件、路由到Java中具体的方法、获取路由参数、获取路由的get属性、已经返回json和xml数据等。html
本篇博客的案例是在上篇博客建立的工程的基础上来实现的,关于Maven管理下的SpringMVC工程的内容,请移步于《JavaEE开发使用Maven管理的SpringMVC工程》。本篇博客对如何使用Maven来管理SpringMVC就不作过多赘述了。spring
1、基本路由配置json
接下来咱们将聊一下经常使用的几种路由配置方式,而后给出每种路由的具体实例。固然本部分仍是比较简单的,虽然简单,可是仍是比较重要的。一些后端经常使用的框架中,都会有各式各样的路由配置方法,可是这些路由的做用都是大同小异的。像ThinkPHP框架中的路由配置也是ThinkPHP运做的基础之一。本部分咱们就好好的聊一下SpringMVC的路由配置。后端
一、配置路由前的准备数组
在配置路由前,咱们得先建立一个Java类,咱们所配置的路由都会映射到该Java类中的特定方法。建立一个Java的普通类,命名为RouteController。下方截图中,上方圆框中就是咱们SpringMVC的配置文件了。由于在SpringMVCConfig中咱们指定了该配置文件的做用域是com.zeluli.springmvc这个包,因此咱们建立的路由控制器RouteController类也必须在此包下方。以下所示。下方会对RouteController类中的内容进行详细的介绍。浏览器
二、路由到JSP文件mvc
接下来咱们就来看一下在SpringMVC中是如何路由到JSP文件的。首先咱们使用spring中的@Controller注解将RouteController类声明为控制器类,而后在经过@RequestMapping配置路由映射。将路由"/route"映射到RouteController类上。也就是说在浏览器中访问该工程下的/route路径,就会访问到RouteController类。稍后会介绍到访问方式。app
声明并映射完相应的Controller类后,咱们在RouteController中建立了一个index()方法。该index()方法比较简单就返回个“index”字符串。而后也是使用@RequestMapping来配置路由。咱们能够看出index()方法所对应的路由值为"/",也就是说,访问/route这个路由,就会映射到index()这个方法上。框架
而index()方法返回的这个字符串其实就是该路由所对应的JSP文件的名称,由于咱们在SpringMVCConfig配置文件中为其添加了前缀和后缀,因此当返回“index”时,咱们访问的就是“/WEB-INF/classes/views/index.jsp”这个资源文件。下方就是SpringMVCConfig中的配置项。jsp
上面实现完方法配置路由后,咱们就能够部署到Tomcat上而后用浏览器访问了,下方截图就是咱们访问/route路由的具体效果。
三、追加路由并设置ResponseBody
接着,咱们继续往/route这个路由上追加字路径。下方咱们建立了一个sub1()方法,该方法有一个参数并返回了一个字符串的值。该参数就是用来接收HttpServletRquest对象的,经过这个对象咱们能够获取到用户发起请求时的一些参数。
咱们将此方法的路由配置为“/sub1”,由于RounteController类的路由是“/route”,因此咱们sub1()方法的总体路由就是“/route/sub1”。而在sub1()方法的前方,咱们使用了@ResponseBody注解将该方法的返回值放在响应体(Response Body)返回给用户。那么用户在访问该路由时,就会获取到该方法返回的值。以下所示。
上面,咱们配置好路由已经响应体后,咱们就能够进行该路由的访问了,下方是该路径访问的效果。从下方效果咱们能够看出路由能够正常访问,而且有返回参数。不过咱们返回的一些中文却产生了码,因此咱们要指定ResponseBody的编码方式。
咱们能够查看一下上述请求的编码方式,从下方内容中咱们能够看出,charset的值是ISO-8859-1。咱们能够将其设置成咱们想要的编码方式。
咱们在配置路由时不只能够指定路由的值(value),并且能够指定路由所响应内容的文本格式已经编码方式。由于sub1()方法是在RouteController类中的,因此咱们能够指定整个类的编码方式。下方就是经过produces属性来指定文本格式已经编码方式的,以下所示。
添加完文本类型以及编码格式后,咱们从新看一下运行结果。从下方的运行结果,咱们不难看出,Response Body中的内容再也不是乱码了,并且Response Header中的Content-Type也变成了咱们设置的值,以下所示。
四、多个路由映射到同一方法上
咱们能够将多个路由映射到同一个Controller的方法上。当咱们给@RequestMapping的value属性赋值一个数组时,数组中的路径都会映射到该注解所修饰的方法中。以下所示。下方的/name1和/name2都会映射到该方法中。以下所示。
2、获取路由及请求参数
咱们在聊Swift的Perfect框架时,其中配置的路由中是能够加一些变量的,而后咱们能够在路由映射中获取路由的参数。在SpringMVC中也是如此,本部分,咱们就来看一下如何获取路由中的参数。以及如何获取用户经过Get方式提交的参数的。
一、配置路由参数
在路由配置中,咱们能够为路由添加参数,而后使用@PathVariable注解来获取该路径变量的值。下方建立的sub2()方法的路由配置中就带有路径变量的,使用{路径变量}来声明路径变量,使用@PathVariable来获取路径变量。
在下方方法中,咱们声明了两个路由变量,一个名为value1,另外一个为value2,在sub2()方法的参数中使用@PathVariable来取出相应变量的值。固然在取值是变量名要和路由中的变量名一致。以下所示。
配置完路由以及路径变量后,咱们就能够进行访问了。下方就是咱们访问的具体结果,已经返回的Response Body的内容。从该实例中咱们不难看出,路径变量在开发中是很是实用的一项功能。
2.获取Get请求的单个参数
获取用户在Get请求中所添加的参数,能够说是在开发中常用的。接下来咱们就来看一下咱们的方法是如何来获取Get请求中的相应参数的值的。本小结的内容比较简单。直接在所映射的方法中添加相应的参数便可。下方sub3()方法的param参数,就是用来接收Get请求参数中名为“param”参数的值的,以下所示。
下方是咱们访问上述路由并传入相应的参数的请求,结果以下所示:
三、获取Get请求的多个参数
上面是获取的Get请求的单个参数,若是一个Get请求有多个参数怎么办呢?确定不能再用上述方法类获取参数的值了。在Spring框架中,支持将获取的参数直接映射成Model。前提是参数的名称必须和特定Model中的属性名称相同,接下来咱们就来作这件事情。将用户传入的参数直接映射成Model。
首先咱们得建立一个Model,下方这段代码就是咱们建立的Model,该Model比较简单,只有两个属性,一个是studentNumber,另外一个则是name。Model类中还对应着各个属性的getter和setter方法。具体代码以下所示。
package com.zeluli.model; public class StudentModel { private String studentNumber; private String name; public StudentModel() { super(); } public String getStudentNumber() { return studentNumber; } public void setStudentNumber(String studentNumber) { this.studentNumber = studentNumber; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
建立好Model后,咱们就能够在Controller里边直接使用了。在路由对应的方法中直接使用相应的Model对象进行接收便可,在接收的过程当中会将参数中相应的值赋给该Model对象中相应的属性。在以前的博客中,咱们讲过iOS中将Json数据直接映射为Model类的方式,是使用Objective-C的Runtime的方式来实现的。固然在Java中也是使用该机制来实现的,不过Java中的Runtime咱们称之为“反射机制”。
咱们对上述路由进行访问,访问结果以下所示。可见,Model的对象中存储的就是咱们URL中传入的参数。
3、JSON及XML数据的返回
在Spring框架中支持JSON和XML的数据绑定,也就是说JOSN或者XML能够与数据对象进行互转。不过咱们要添加相应的依赖库。本部分咱们就来看一下Spring框架中的JSON和XML的数据绑定。
一、依赖库的引入
由于咱们的项目是使用Maven进行管理的,因此依赖库的引入是至关简单的,下方就是pom.xml文件中添加的JSON以及XML数据绑定所依赖的库。固然,下方的依赖库的版本不必定是最新的,不过你能够从Maven的Repository中查找你想要的依赖库的版本。
<!-- 添加对象向json或xml转换的支持 --> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml --> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.8.6</version> </dependency> <!-- 添加json数据绑定支持 --> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.6</version> </dependency>
2.JSON的数据绑定
引入完上述依赖库后,咱们就能够进行JSON的数据绑定了。本部分作的就是将Model的数据转成JSON直接返回给客户端。依然是在RouteController中进行实现。在下方代码片断中,客户端收到的就是JSON格式的数据。在使用@RequestMapping来配置路由时,咱们使用produces属性来配置Response Body的文本类型,下方咱们将文本类型设置成“application/json”,编码格式依然选择UTF-8。将接受到的数据对象之间返回给用户,这时候用户收到的就是json格式的数据信息。
咱们对上述配置的路径进行访问、从下方的访问结果不难看出,用户收到的是JSON格式的数据、以下所示:
三、XML的数据格式的绑定
固然XML的数据绑定与JOSN相似,只不过是讲produces属性的文本类型转换成“application/xml”。返回的仍是StudentModel的对象,以下所示。
下方就是访问该路由所对应的结果:
4、REST-Controller的建立
当咱们建立的Controller了是专门为做为App接口或者其余API的话,能够将咱们的Controller声明为RestController。由于从上述实例中咱们不难看出,普通的Controller中,若是要将返回的数据放到Response Body中,须要在相应的方法前面使用@ResponseBody来进行注解。
可是当咱们使用@RestController注解将咱们的Controller声明为RestController时,就不用在每一个方法前面添加上@ResponseBody注解了,由于在RestController中路由所映射的方法的返回值就会直接放入到Response Body 中。
下方就是咱们建立的RestController, 其中路由所映射的方法是不须要@ResponseBody来进行注解的,以下所示:
下方就是咱们访问“/rest”路由所返回的内容:
5、路由的快捷设置
咱们也能够在SpringMVC的配置文件中来快速的设置路由与JSP页面的映射关系,固然实现起来也是比较简单的。只须要咱们的Spring的配置类继承于WebMvcConfigurerAdapter而后重写addViewControllers()方法便可。在addViewController()的方法中来进行路由到JSP页面的映射关系。以下所示:
咱们直接访问"/indextest"路由,访问的就是index.jsp页面了。该功能会在后几篇博客中常常用到。
好今天博客的内容也够多的了,就先到这儿吧。关于JavaEE的东西,会继续更新的。