最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器

 更新時(shí)間:2023年06月29日 09:35:25   作者:會(huì)洗碗的CV工程師  
這篇文章主要為大家詳細(xì)介紹了Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器,文中通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下

一、使用Servlet原生對象獲取參數(shù)

SpringMVC也支持使用Servlet原生對象,在方法參數(shù)中定義HttpServletRequest 、HttpServletResponse 、 HttpSession 等類型的參數(shù)即可直接在方法中使用。

1.1 控制器方法

// 使用Servlet原生對象
    @RequestMapping("c1/param8")
    public void servletParam(HttpSession session,HttpServletRequest request, HttpServletResponse response){
        // 原生對象獲取參數(shù)
        System.out.println(request.getParameter("name"));
        System.out.println(response.getCharacterEncoding());
        System.out.println(session.getId());
    }

這個(gè)就是一個(gè)很經(jīng)典的利用request內(nèi)置對象獲取參數(shù)了。請求之后在控制臺打印參數(shù)和編碼方式還有對應(yīng)的sessionId。

訪問路徑:http://localhost:8080/c1/param8?name=LYL

1.2 測試結(jié)果

OK,可以看得出來是已經(jīng)成功把參數(shù)值和編碼方式和sessionId給查詢出來了

一般情況下,在SpringMVC中都有對Servlet原生對象的方法的替代,推薦使SpringMVC的方式代替Servlet原生對象。

二、自定義參數(shù)類型轉(zhuǎn)換器

前端傳來的參數(shù)全部為字符串類型,SpringMVC使用自帶的轉(zhuǎn)換器將字符串參數(shù)轉(zhuǎn)為需要的類型。如:

// 獲取簡單類型參數(shù)
@RequestMapping("/c1/param1")
public void simpleParam(String username,int age){
    System.out.println(username+" "+age);
}
但在某些情況下,無法將字符串轉(zhuǎn)為需要的類型,如:

// 自定義轉(zhuǎn)換日期格式字符串
@RequestMapping("c1/param9")
public void dataParam(Date birthday){
    System.out.println(birthday);
}
此時(shí)我們測試一下看看是什么結(jié)果:

控制臺輸出: 

報(bào)錯(cuò)原因:

[WARNING]Resolved[org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2025-01-01'; nested exception is java.lang.IllegalArgumentException]
 具體意思就是:[org.springframework.web.method.annotation.MethodArgumentTypeMismatchException:未能將類型為“java.lang.String”的值轉(zhuǎn)換為所需類型“java.util.Date”;嵌套異常為org.springfframework.core.covert.ConversionFailedException:無法將值“2025-01-01”從類型[java.lang.SString]轉(zhuǎn)換為類型[java.util.Date];嵌套異常為java.lang.IllegalArgumentException]

2.1 編寫類型轉(zhuǎn)換器類

由于日期數(shù)據(jù)有很多種格式,SpringMVC沒辦法把所有格式的字符串轉(zhuǎn)換成日期類型。比如參數(shù)格式為 birthday=2025-01-01 時(shí),SpringMVC就無法解析參數(shù)。此時(shí)需要自定義參數(shù)類型轉(zhuǎn)換器。 首先得定義類型轉(zhuǎn)換器類,實(shí)現(xiàn)Converter接口。寫法如下:  

package com.example.converter;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DataConverter implements Converter<String, Date> {
    /**
     * 轉(zhuǎn)換方法
     * @param s 轉(zhuǎn)換前的數(shù)據(jù)
     * @return 轉(zhuǎn)換后的數(shù)據(jù)
     */
    @Override
    public Date convert(String s) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
        Date date = null;
        try{
            date = sdf.parse(s);
        } catch (ParseException e) {
            System.out.println("轉(zhuǎn)換成日期格式出錯(cuò)了!");
            e.printStackTrace();
        }
        return date;
    }
}

2.2 注冊類型轉(zhuǎn)換器對象

<!-- 配置轉(zhuǎn)換器工廠 -->
    <bean id="dateConverter" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <!-- 轉(zhuǎn)換器集合 -->
        <property name="converters">
            <set>
                <!-- 自定義轉(zhuǎn)換器 -->
                <bean class="com.example.converter.DataConverter"></bean>
            </set>
        </property>
    </bean>
    <!-- 使用轉(zhuǎn)換器工廠 -->
    <mvc:annotation-driven conversion-service="dateConverter"></mvc:annotation-driven>

OK,加了上面這些我們再運(yùn)行測試一遍看看控制能否成功接收 

2.3 測試結(jié)果

可以看到報(bào)的是404錯(cuò)誤,沒有找到這個(gè)頁面,而不是400了

OK,控制臺也成功打印出來了。 

三、編碼過濾器

在傳遞參數(shù)時(shí),tomcat8以上能處理get請求的中文亂碼,但不能處理post請求的中文亂碼

3.1 JSP表單

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>專屬頁面</title>
</head>
<body>
  <form action="/c1/param3" method="post">
    <table>
      <tr>
        <th>id:</th>
        <td><input name="id"/></td>
      </tr>
      <tr>
        <th>姓名:</th>
        <td><input name="name"/></td>
      </tr>
      <tr>
        <th>性別:</th>
        <td><input name="sex"/></td>
      </tr>
      <tr>
        <th>住址:</th>
        <td><input name="address.info"/></td>
      </tr>
      <tr>
        <th>郵編:</th>
        <td><input name="address.postcode"/></td>
      </tr>
      <tr align="center">
        <td><input type="submit"/></td>
      </tr>
    </table>
  </form>
</body>
</html>

這里是一個(gè)表單提交的頁面

3.2 控制器方法

控制器方法我就沿用了之前的,如下: 

    @RequestMapping("c1/param3")
    public void objParam2(Student student){
        System.out.println(student);
    }

3.3 配置過濾器

SpringMVC提供了處理中文亂碼的過濾器,在web.xml中配置該過濾器即可解決中文亂碼問題:添加如下配置:

<!-- SpringMVC中提供的字符編碼過濾器,放在所有過濾器的最上方 -->
  <filter>
    <filter-name>encFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

3.4 測試結(jié)果 

提交上述信息,看看控制臺打印有沒有亂碼,如果沒有亂碼,則說明字符編碼過濾器配置成功。

OK,說明確實(shí)是可以了,并且表單提交的name屬性和Student屬性對應(yīng)的話,也是可以直接賦值給對應(yīng)的參數(shù)的。

到此這篇關(guān)于Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器的文章就介紹到這了,更多相關(guān)Spring MVC參數(shù)、轉(zhuǎn)換器及過濾器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Spring Expression Language (SpEL)全面解析表達(dá)式

    使用Spring Expression Language (SpEL)全面解析表達(dá)式

    這篇文章主要介紹了使用Spring Expression Language (SpEL)全面解析表達(dá)式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java 類動(dòng)態(tài)添加屬性字段的操作

    Java 類動(dòng)態(tài)添加屬性字段的操作

    這篇文章主要介紹了Java 類動(dòng)態(tài)添加屬性字段的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java去除集合中重復(fù)元素示例分享 java去除重復(fù)

    java去除集合中重復(fù)元素示例分享 java去除重復(fù)

    這篇文章主要介紹了java去除集合中重復(fù)元素示例,大家參考使用吧
    2014-01-01
  • Spring Boot 中的Servlet簡單使用

    Spring Boot 中的Servlet簡單使用

    在spring boot中添加自己的Servlet有兩種方法,代碼注冊Servlet和注解自動(dòng)注冊(Filter和Listener也是如此)。這篇文章主要介紹了Spring Boot 中的Servlet簡單使用,需要的朋友可以參考下
    2017-04-04
  • SpringMVC設(shè)置全局異常處理器的步驟

    SpringMVC設(shè)置全局異常處理器的步驟

    在項(xiàng)目中我們有需求做一個(gè)全局異常處理,來規(guī)范所有出去的異常信息,這篇文章主要介紹了SpringMVC設(shè)置全局異常處理器,需要的朋友可以參考下
    2024-03-03
  • SpringBoot整合Lucene實(shí)現(xiàn)全文檢索的詳細(xì)步驟

    SpringBoot整合Lucene實(shí)現(xiàn)全文檢索的詳細(xì)步驟

    全文搜索(Full-Text?Search)是指對大規(guī)模存儲在計(jì)算機(jī)系統(tǒng)中的文本數(shù)據(jù)進(jìn)行檢索和匹配的技術(shù),它允許用戶輸入關(guān)鍵字,然后從海量的文本數(shù)據(jù)中快速找到相關(guān)的信息,本文介紹了SpringBoot整合Lucene實(shí)現(xiàn)全文檢索的詳細(xì)步驟,需要的朋友可以參考下
    2024-03-03
  • Java并發(fā)編程中的CompletableFuture使用詳解

    Java并發(fā)編程中的CompletableFuture使用詳解

    這篇文章主要介紹了Java并發(fā)編程中的CompletableFuture使用詳解,Future接口定義了操作異步任務(wù)執(zhí)行的一些方法,如獲取異步任務(wù)執(zhí)行的結(jié)果、取消任務(wù)的執(zhí)行、判斷任務(wù)是否被取消,判斷任務(wù)是否執(zhí)行完畢等,需要的朋友可以參考下
    2023-12-12
  • java中jdk的下載和安裝全過程

    java中jdk的下載和安裝全過程

    這篇文章主要給大家介紹了關(guān)于java中jdk的下載和安裝的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 詳解SpringBoot如何自定義一個(gè)Starter

    詳解SpringBoot如何自定義一個(gè)Starter

    小伙伴們曾經(jīng)可能都經(jīng)歷過整天寫著CURD的業(yè)務(wù),都沒寫過一些組件相關(guān)的東西,這篇文章記錄一下SpringBoot如何自定義一個(gè)Starter。原理和理論就不用多說了,可以在網(wǎng)上找到很多關(guān)于該方面的資料,這里主要分享如何自定義
    2022-11-11
  • 歸并算法之有序數(shù)組合并算法實(shí)現(xiàn)

    歸并算法之有序數(shù)組合并算法實(shí)現(xiàn)

    這篇文章主要介紹了歸并算法之有序數(shù)組合并算法實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07

最新評論

厦门市| 静宁县| 安康市| 泌阳县| 中方县| 徐州市| 沈阳市| 饶平县| 余干县| 大同县| 禹城市| 东乡| 绥阳县| 武隆县| 兰西县| 怀来县| 乐山市| 报价| 安岳县| 延庆县| 静宁县| 临高县| 巴中市| 黄梅县| 通辽市| 军事| 阳山县| 梓潼县| 秦安县| 贵南县| 漾濞| 穆棱市| 灵寿县| 长武县| 沅江市| 虹口区| 抚顺市| 布拖县| 三都| 东辽县| 门源|