JavaEE开垦之SpringMVC中的路由配置及参数传递详解

在头里大家接纳斯维夫特的Perfect框架来支付服务端程序时,谈起了Perfect中的路由配置。而在SpringMVC中的路由配置与其也是大概的。聊到路由,其实便是将U景逸SUVL映射到Java的现实性类中的具体方法,或然映射到现实的JSP文件上。本篇博客首要就演说了怎么在SpringMVC中布署路由以及REST配置。下方将会聊起路由到JSP文件、路由到Java中切实的方法、获取路由参数、获取路由的get属性、已经再次回到json和xml数据等。

JavaEE开采之SpringMVC中的自定义音讯调换器与公事上传,javaeespringmvc

上篇博客大家详细的聊了《JavaEE开采之SpringMVC中的静态能源映射及服务器推送本事》,本篇博客依旧是JavaEE开垦中的内容,大家就来聊一下SpringMVC中的自定义新闻转发器(HttpMessageConverter)和SpringMVC中的文件上传。新闻转载器在平时支出中是比较常用的,其能够灵活的将用户发过来的音讯根据自定义的格式实行分析,然后将分析的多少映射成Model,下方会给来自定义新闻转载器的事无巨细内容。聊完新闻转载器,我们还会聊一下Spring中MVC的文书上传的操作。详细的内容请看下方介绍。

 

1、自定义新闻转载器

接下去大家将达成自定义新闻转载器,在自定义音讯转发器时,我们要求根基Springframework中的AbstractHttpMessageConverter那个抽象类。那几个抽象类中就定义着我们自定义音讯转载器所须要的秘诀。大家将这一个主意开始展览重写就好。

 

1.开立音信转载器的类

尘寰正是大家成立自定义新闻转载器的长河,我们将其取名叫CustomMessageConverter类,如下所示:

  图片 1

 

接下去大家就来聊一下CustomMessageConverter中的内容,下方代码段就是CustomMessageConverter类中的部分内容。在承袭类时,咱们将泛型钦定为StudentModel类,然后在此类中的构造器中,我们创设了三个新的传播媒介类型。该媒体类型便是大家团结定义的,并且钦点了相应的编码格局。在重写的support()方法中,大家来推断所帮助的Class是不是与StudentModel的Class一样。如下所示:

  图片 2

 

下一场下方多少个重写的秘籍是肩负数据的输入和输出的章程。在readInternal()方法中,就背负接收客户端所发过来的音讯,并依照我们自定义的传播媒介类型实行辨析。此处大家能够将新的枚举类型的格式遵照“aaa-bbb-ccc”的方法进行传输,约等于参数之间用“-”举办拆分,而解析的时候我们就依据此规则举办拆分,然后赋值给相应的Model对象,并且将该指标开始展览再次来到。

而输出方法writeInternal()中的3个参数正是下面输入方法所重返的Model对象,大家得以在该方法中,依照用户所提供的新闻,给出输出值。此处,大家将数据提供的数近来方加了“hello”进行了回到,如下所示。

  图片 3

 

二、Spring配置自定义信息转载器

创设完消息转载器的类后,接下去,大家就得在Spring配置文件中开始展览扩张配置。下方的代码段就是Spring配置文件中对上述自定义音讯转载器的配置,在重写的extendMessageConverters()方法中,将上述自定义的音信转发对象开展加多就可以,具体代码如下所示。

  图片 4

 

3、创造上述音信转载器的测试调控器

下边到底大家的音讯转载器的东西解决了,接下去,咱们就该对其进展测试了。下方代码段就是大家成立的用来测试自定义新闻转载器的测试Controller,我们将其取名叫MessageConverterController。我们在路由安装时,我们将其媒体类型设置为“application/x-parameter”类型。如下所示:

 1 package com.zeluli.springmvc.web;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestBody;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.bind.annotation.ResponseBody;
 7 
 8 import com.zeluli.model.StudentModel;
 9 
10 @Controller
11 public class MessageConverterController {
12     @RequestMapping(value = "/convert", produces = {"application/x-parameter"})
13     @ResponseBody
14     public StudentModel converter(@RequestBody StudentModel student) {
15         return student;
16     }
17 }

 

四、测试页面包车型客车创造

始建完测试类后,接下去大家就来创建我们的JSP测试页面。大家创制3个message_converter.jsp页面来像我们地方的Controller发起请求。在该公文中,首要接纳了jQuery中的ajax进行呼吁的,而且是POST请求,具体如下所示。下方的代码首要效率就是点击三回按键,举办二回呼吁,然后将请求的多少拉长到HTML文件的节点中,代码如下所示。

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <script type="text/javascript" src="assets/js/jquery.js"></script>
 8 <script type="text/javascript">
 9     function req() {
10         $.ajax({
11             url: "convert",
12             data: "002034-zeluli",
13             type: "POST",
14             contentType: "application/x-parameter",
15             success: function(data){
16                 $("#resp").append("<h3>" + data + "</h3>");
17             }
18         });
19     }
20 </script>
21 <title>Insert title here</title>
22 </head>
23 <body>
24 <input type="button" onclick="req();" value="请求"/>
25     <div id = "resp">
26     </div>
27     
28 </body>
29 </html>

 

下一场大家须求为上述JSP页面在Spring的Config文件中为其配置路由,将访问路线路由到上述jsp页面上。在布署文件中的addViewControllers()方法中加多上下方的代码片段:

registry.addViewController("/message_converter").setViewName("/message_converter");

 

布置好路由后,接下去大家就能够对其测试了。下方正是我们测试的末段结出,如下所示:

  图片 5

 

 

 

贰、文件上传

聊完音信转载器,接下去大家就来聊一下SpringMVC中的文件上传的东西。当然,在SpringMVC中的文件上传是相比较轻松的。下方大家先在Maven的依赖库中增添大家本有的需求的库、然后在Spring的安顿文件中举办布局、然后创立上传文件的Controller、最终创造上传页面包车型的士JSP页面。详细的始末请看下方。

 

1.引进上传文件的依赖库

先是大家得引入上传文件所需求的注重性库,下方正是我们在pom.xml配置的重视库。三个是承受文件上传的注重库,一个是负担文件IO操作的注重库。下方那么些正视库,大家都得以在Maven的官网上找到,如下所示:

 1           <!-- 文件上传 -->
 2     <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
 3     <dependency>
 4         <groupId>commons-fileupload</groupId>
 5         <artifactId>commons-fileupload</artifactId>
 6         <version>1.3.1</version>
 7     </dependency>
 8     
 9     <!-- 简化io操作 -->
10     <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
11     <dependency>
12         <groupId>commons-io</groupId>
13         <artifactId>commons-io</artifactId>
14         <version>2.4</version>
15     </dependency>
16       

 

2、配置文件上传 

引进完相应的依赖库后,我们得在Spring的安插文件中开始展览布局后我们的文书上传才可生效。下方正是Spring配置文件中对文本上传的配置。具体如下所示:

  图片 6

 

3、创设文件上传的Controller

引入完文件上传的正视库和布局完后,接下去大家就该创设文件上传的Controller。下方大家创立的名叫UploadFileController的调控器正是负责文件上传的。下方的大家钦定请求格局是POST格局,然后从呼吁体重使用@RequestParam(“参数名”)来得到相应的上传文件。获取到上传文件后,大家在经过文件IO操作,将用户上传的文件保留到钦定目录,如下所示:

  图片 7

 

四、创制文件上传的JPS页面

文本上传调节器创造达成后,接下去大家就该创造相应的上传文件的JPS页面了。当然,下方的HTML代码相比较轻松,正是利用Form表单来张开对应的文书上传。具体代码如下所示: 

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10     <div class="upload">
11           <form action="upload_file" enctype="multipart/form-data" method="post">
12             <input type="file" name="file"/><br/>
13             <input type="submit" value="上传"/>
14         </form>
15     </div>
16 </body>
17 </html>

 

开创完JSP页面后,我们照旧要对该JSP页面进行路由的配置。大家依旧是接纳在Spring的配备文件中开始展览高效的路由配置,如下所示:

图片 8

 

下面这一个都做好后,接下去大家就足以访问上述配置的公文上传的路由了,下方便是呼应的结果,如下所示。上传完成后,会回来OK提示,并且在相应的文本中会出现用户所上传的公文,如下所示:

 

本篇博客就先到此,上述示范在github上的分享地址为:https://github.com/lizelu/SpringMVCWithMaven

 

http://www.bkjia.com/Javabc/1209143.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javabc/1209143.htmlTechArticleJavaEE开发之SpringMVC中的自定义消息转换器与文件上传,javaeespringmvc
上篇博客大家详细的聊了《
JavaEE开拓之SpringMVC中的静态财富映射及服务…

本篇博客的案例是在上篇博客创设的工程的功底上来得以实现的,关于Maven管理下的SpringMVC工程的内容,请移步于《JavaEE开辟应用Maven管理的SpringMVC工程》。本篇博客对什么样运用Maven来保管SpringMVC就不做过多废话了。

 

1、基本路由陈设

接下去大家将聊一下常用的二种路由安插情势,然后交给各样路由的现实实例。当然本有的照旧比较简单的,固然简易,但是依然比较重大的。一些后端常用的框架中,都会有各个各个的路由配置形式,然则这一个路由的作用都是相差无几的。像ThinkPHP框架中的路由配置也是ThinkPHP运作的功底之一。本有的我们就完美的聊一下SpringMVC的路由配置。

 

壹、配置路由前的预备

在配备路由前,我们得先制造多少个Java类,大家所布署的路由都会炫丽到该Java类中的特定措施。创制2个Java的普通类,命名字为RouteController。下方截图中,上方圆框中正是我们SpringMVC的计划文件了。因为在SpringMVCConfig中大家钦定了该配置文件的功能域是com.zeluli.springmvc这么些包,所以大家成立的路由调控器RouteController类也非得在此包下方。如下所示。下方会对RouteController类中的内容张开详尽的牵线。

  图片 9

 

 

2、路由到JSP文件

接下去大家就来看一下在SpringMVC中是什么样路由到JSP文件的。首先大家使用spring中的@Controller申明将RouteController类表明为垄断器类,然后在经过@RequestMapping配置路由映射。将路由”/route”映射到RouteController类上。也便是说在浏览器中访问该工程下的/route路线,就会访问到RouteController类。稍后会介绍到走访格局。

注脚并映射完相应的Controller类后,大家在RouteController中创建了2个index()方法。该index()方法相比较简单就回去个“index”字符串。然后也是运用@RequestMapping来安顿路由。大家可以看看index()方法所对应的路由值为”/”,也便是说,访问/route那么些路由,就会炫彩到index()那个格局上。

  图片 10

 

而index()方法重临的那几个字符串其实便是该路由所对应的JSP文件的名目,因为大家在SpringMVCConfig配置文件中为其增多了前缀和后缀,所以当重返“index”时,大家访问的正是“/WEB-INF/classes/views/index.jsp”这么些能源文件。下方就是SpringMVCConfig中的配置项。

  图片 11

 

地点达成完方法配置路由后,大家就足以布署到汤姆cat上然后用浏览器访问了,下方截图就是大家走访/route路由的实际职能。

  图片 12

 

 

三、追加路由并设置ResponseBody

随之,大家后续往/route这么些路由上追加字路线。下方大家创制了3个sub一()方法,该办法有二个参数并赶回了三个字符串的值。该参数正是用来接受HttpServlet奇骏quest对象的,通过这几个目的大家能够赢得到用户发起呼吁时的1部分参数。

我们将此方法的路由配置为“/sub一”,因为RounteController类的路由是“/route”,所以我们sub1()方法的完整路由正是“/route/sub一”。而在sub一()方法的火线,大家运用了@ResponseBody表明将该办法的再次来到值放在响应体(Response
Body)再次来到给用户。那么用户在走访该路由时,就会博获得该格局重回的值。如下所示。

  图片 13

 

上边,大家配备好路由壹度响应体后,大家就足以进行该路由的造访了,下方是该路径访问的功能。从下方效果大家能够看出路由得以健康访问,并且有重返参数。不过大家回来的有个别华语却发生了码,所以大家要钦赐ResponseBody的编码形式。

  图片 14

 

 大家得以查看一下上述呼吁的编码方式,从红尘内容中我们可以见见,charset的值是ISO-885九-一。大家得以将其设置成大家想要的编码方式。

  图片 15

 

作者们在安顿路由时不仅能够钦点路由的值(value),而且能够钦定路由所响应内容的文本格式已经编码方式。因为sub壹()方法是在RouteController类中的,所以大家得以内定整个类的编码格局。下方正是通过produces属性来钦定文本格式已经编码格局的,如下所示。

  图片 16

 

加多完文本类型以及编码格式后,大家再度看一下运转结果。从下方的运作结果,大家简单看出,Response
Body中的内容不再是乱码了,而且Response Header中的Content-Type也变为了我们设置的值,如下所示。

  图片 17

 

 

肆、多少个路由映射到一样方法上

咱俩得以将四个路由映射到同二个Controller的章程上。当大家给@RequestMapping的value属性赋值二个数组时,数组中的路线都会炫丽到该申明所修饰的艺术中。如下所示。下方的/name一和/name二都会炫人眼目到该方法中。如下所示。

  图片 18

 

 

二、获取路由及请求参数

我们在聊Swift的Perfect框架时,此中安插的路由中是足以加1些变量的,然后我们能够在路由映射中收获路由的参数。在SpringMVC中也是那般,本有的,大家就来看一下怎么样赢得路由中的参数。以及怎么着赢得用户通过Get格局提交的参数的。

 

一、配置路由参数

在路由安顿中,大家可以为路由增添参数,然后使用@PathVariable注明来获得该路径变量的值。下方创造的sub二()方法的路由配置中就隐含路线变量的,使用{路线变量}来声称路线变量,使用@PathVariable来获取路线变量。

在世间方法中,大家注明了两个路由变量,1个名叫value1,另三个为value贰,在sub2()方法的参数中动用@PathVariable来抽取相应变量的值。当然在取值是变量名要和路由中的变量名一致。如下所示。

  图片 19

安顿完路由以及路线变量后,大家就足以拓展走访了。下方正是大家访问的有血有肉结果,已经重回的Response
Body的内容。从该实例中大家简单看出,路线变量在开辟中是十分实用的1项意义。

  图片 20

 

贰.拿走Get请求的单个参数

赢得用户在Get请求中所加多的参数,能够说是在开垦中时时采用的。接下来我们就来看一下大家的主意是何许来获取Get请求中的相应参数的值的。本小结的始末比较轻易。直接在所映射的措施中增加相应的参数就可以。下方sub3()方法的param参数,就是用来接过Get请求参数中名字为“param”参数的值的,如下所示。

  图片 21

红尘是我们访问上述路由并传播相应的参数的乞求,结果如下所示:

  图片 22

 

叁、获取Get请求的多少个参数

地点是获取的Get请求的单个参数,固然3个Get请求有多个参数怎么做吧?料定不能再用上述方法类获取参数的值了。在Spring框架中,辅助将获得的参数直接映射成Model。前提是参数的称号必须和一定Model中的属性名称一样,接下去大家就来做那件事情。将用户传入的参数直接映射成Model。

首先我们得成立3个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我们称为“反射机制”。

  图片 23

笔者们对上述路由进行走访,访问结果如下所示。可知,Model的对象中贮存的就是大家U卡宴L中传来的参数。

  图片 24

 

 

三、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>

 

二.JSON的数码绑定

引进完上述看重库后,我们就能够张开JSON的数额绑定了。本有的做的正是将Model的多少转成JSON直接重返给客户端。仍然是在RouteController中开展落到实处。在人世代码片段中,客户端收到的就是JSON格式的数据。在接纳@RequestMapping来安排路由时,大家运用produces属性来安顿Response
Body的文件类型,下方大家将文件类型设置成“application/json”,编码格式还是选用UTF-8。将承受到的多少对象之间回到给用户,那时候用户收到的正是json格式的多寡音讯。

  图片 25

我们对上述配置的门路进行走访、从下方的走访结果轻松看出,用户接受的是JSON格式的数据、如下所示:

  图片 26

 

叁、XML的数码格式的绑定

本来XML的数额绑定与JOSN类似,只然则是讲produces属性的公文类型转变到“application/xml”。重返的依旧StudentModel的指标,如下所示。

  图片 27

俗世就是访问该路由所对应的结果:

  图片 28

 

 

 

 四、REST-Controller的创建

当大家创立的Controller了是特意为作为App接口或许别的API的话,能够将大家的Controller注脚为RestController。因为从上述实例中我们轻便看出,普通的Controller中,假诺要将再次来到的数量放到Response
Body中,要求在相应的秘诀后面使用@ResponseBody来张开证明。

然则当我们应用@RestController申明将大家的Controller申明为RestController时,就毫无在各样方法前边增多上@ResponseBody证明了,因为在RestController中路由所映射的章程的再次回到值就会直接放入到Response
Body 中。

江湖正是我们成立的RestController,
个中路由所映射的法子是不必要@ResponseBody来进展评释的,如下所示:

  图片 29

俗尘正是大家走访“/rest”路由所再次来到的剧情:

  图片 30

 

伍、路由的高效设置

笔者们也得以在SpringMVC的布局文件中来连忙的设置路由与JSP页面包车型地铁映射关系,当然完成起来也是相比较轻松的。只供给大家的Spring的配置类承接于WebMvcConfigurerAdapter然后重写addViewControllers()方法就能够。在addViewController()的格局中来进行路由到JSP页面的投射关系。如下所示:

  图片 31

作者们直接待上访问”/indextest”路由,访问的正是index.jsp页面了。该成效会在后几篇博客中不时用到。

 

好明天博客的始末也够多的了,就先到那时吧。关于JavaEE的东西,会继续革新的。

 

相关文章