JavaEE開發之SpringMVC中的自定義消息轉換器與文件上傳


上篇博客我們詳細的聊了《JavaEE開發之SpringMVC中的靜態資源映射及服務器推送技術》,本篇博客依然是JavaEE開發中的內容,我們就來聊一下SpringMVC中的自定義消息轉發器(HttpMessageConverter)和SpringMVC中的文件上傳。消息轉發器在日常開發中是比較常用的,其可以靈活的將用戶發過來的消息按照自定義的格式進行解析,然后將解析的數據映射成Model,下方會給出自定義消息轉發器的詳細內容。聊完消息轉發器,我們還會聊一下Spring中MVC的文件上傳的操作。詳細的內容請看下方介紹。

 

一、自定義消息轉發器

接下來我們將實現自定義消息轉發器,在自定義消息轉發器時,我們需要基礎Springframework中的AbstractHttpMessageConverter這個抽象類。這個抽象類中就定義着我們自定義消息轉發器所需要的方法。我們將這些方法進行重寫就好。

 

1.創建消息轉發器的類

下方就是我們創建自定義消息轉發器的過程,我們將其命名為CustomMessageConverter類,如下所示:

  

 

接下來我們就來聊一下CustomMessageConverter中的內容,下方代碼段就是CustomMessageConverter類中的部分內容。在繼承類時,我們將泛型指定為StudentModel類,然后在該類中的構造器中,我們創建了一個新的媒體類型。該媒體類型就是我們自己定義的,並且指定了相應的編碼方式。在重寫的support()方法中,我們來判斷所支持的Class是否與StudentModel的Class相同。如下所示:

  

 

然后下方兩個重寫的方法是負責數據的輸入和輸出的方法。在readInternal()方法中,就負責接收客戶端所發過來的消息,並按照我們自定義的媒體類型進行解析。此處我們可以將新的枚舉類型的格式按照“aaa-bbb-ccc”的方式進行傳輸,也就是參數之間用“-”進行拆分,而解析的時候我們就按照此規則進行拆分,然后賦值給相應的Model對象,並且將該對象進行返回。

而輸出方法writeInternal()中的一個參數就是上面輸入方法所返回的Model對象,我們可以在該方法中,根據用戶所提供的信息,給出輸出值。此處,我們將數據提供的數據前方加了“hello”進行了返回,如下所示。

  

 

2、Spring配置自定義消息轉發器

創建完消息轉發器的類后,接下來,我們就得在Spring配置文件中進行擴展配置。下方的代碼段就是Spring配置文件中對上述自定義消息轉發器的配置,在重寫的extendMessageConverters()方法中,將上述自定義的消息轉發對象進行添加即可,具體代碼如下所示。

  

 

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 }

 

4、測試頁面的創建

創建完測試類后,接下來我們就來創建我們的JSP測試頁面。我們創建一個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");

 

配置好路由后,接下來我們就可以對其測試了。下方就是我們測試的最終結果,如下所示:

  

 

 

 

二、文件上傳

聊完消息轉發器,接下來我們就來聊一下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配置文件中對文件上傳的配置。具體如下所示:

  

 

3、創建文件上傳的Controller

引入完文件上傳的依賴庫和配置完后,接下來我們就該創建文件上傳的Controller。下方我們創建的名為UploadFileController的控制器就是負責文件上傳的。下方的我們指定請求方式是POST方式,然后從請求體重使用@RequestParam("參數名")來獲取相應的上傳文件。獲取到上傳文件后,我們在通過文件IO操作,將用戶上傳的文件保存到指定目錄,如下所示:

  

 

4、創建文件上傳的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的配置文件中進行快速的路由配置,如下所示:

 

上面這些都做好后,接下來我們就可以訪問上述配置的文件上傳的路由了,下方就是相應的結果,如下所示。上傳完畢后,會返回OK提示,並且在相應的文件中會出現用戶所上傳的文件,如下所示:

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM