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

Spring MVC 自定義數(shù)據(jù)轉(zhuǎn)換器的思路案例詳解

 更新時(shí)間:2021年09月16日 15:38:52   作者:Training.L  
本文通過兩個(gè)案例來介紹下Spring MVC 自定義數(shù)據(jù)轉(zhuǎn)換器的相關(guān)知識(shí),每種方法通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下

數(shù)據(jù)轉(zhuǎn)換器是指將客戶端 http 請(qǐng)求中的參數(shù)轉(zhuǎn)換為業(yè)務(wù)方法中定義的形參,自定義表示開發(fā)者可以自主設(shè)計(jì)轉(zhuǎn)換模式,HandlerAdapter 已經(jīng)提供了通用的轉(zhuǎn)換,比如將 String 轉(zhuǎn)成 int,String 轉(zhuǎn)成 double,表單數(shù)據(jù)的封裝等,但是在特殊的業(yè)務(wù)場(chǎng)景下,HandlerAdapter 無法進(jìn)行轉(zhuǎn)換,就需要開發(fā)者自定義轉(zhuǎn)換器。

我們需要實(shí)現(xiàn) Converter 接口來協(xié)助 Spring MVC 完成數(shù)據(jù)類型的轉(zhuǎn)換,下面通過兩個(gè)案例來介紹如何自定義數(shù)據(jù)轉(zhuǎn)換器。

案例一:客戶端輸入 String 類型的日期數(shù)據(jù) “2021-09-16”,自定義轉(zhuǎn)換器將該數(shù)據(jù)轉(zhuǎn)為 Date 類型的對(duì)象。

Step1:創(chuàng)建 DateConverter 轉(zhuǎn)換器,實(shí)現(xiàn) org.springframework.core.convert.converter.Converter 接口,定義泛型為 <String,Date> ,將 String 類型的數(shù)值轉(zhuǎn)換為 Date 類型;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateConverter implements Converter<String, Date> {
    //解析的模式串
    private String pattern;

    public DateConverter(String pattern){
        this.pattern = pattern;
    }

    @Override
    public Date convert(String s) {
        //轉(zhuǎn)換邏輯代碼
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(this.pattern);
        Date date = null;
        try {
            date = simpleDateFormat.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}

Step2:在 springmvc.xml 中配置轉(zhuǎn)換器;

  • 配置 id="conversionService" 的 bean,bean 的類名稱必須是 org.springframework.context.support.ConversionServiceFactoryBean,bean 必須包含一個(gè) converters 屬性,它將列出在應(yīng)用程序中用到的所有自定義數(shù)據(jù)轉(zhuǎn)換器。然后將我們自定義的 DateConverter 添加到 list 標(biāo)簽對(duì)中,通過有參構(gòu)造函數(shù)創(chuàng)建 DateConverter 對(duì)象;
  • <mvc:annotation-driven /> 標(biāo)簽元素的 conversion-service 屬性添加 bean 名稱;
<!-- 配置自定義轉(zhuǎn)換器 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="com.trainingl.converter.DateConverter">
                <constructor-arg type="java.lang.String" value="yyyy-MM-dd"></constructor-arg>
            </bean>
        </list>
    </property>
</bean>

<mvc:annotation-driven conversion-service="conversionService">
    <!-- 消息轉(zhuǎn)換器 -->
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <property name="supportedMediaTypes" value="text/html;charset=UTF-8"></property>
        </bean>
        <!-- 配置fastjson -->
        <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
    </mvc:message-converters>
</mvc:annotation-driven>

Step3:創(chuàng)建 addDate 視圖頁面,提交form 表單數(shù)據(jù)到后臺(tái);

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="/date" method="post">
        出生日期: <input type="date" name="birthday" />
        <input type="submit" value="提交">
    </form>
</body>
</html>

Step4:創(chuàng)建控制器的業(yè)務(wù)方法;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Date;

@Controller
public class DateHandler {

    @RequestMapping("/date")
    @ResponseBody
    public String userDate(Date birthday){
        System.out.println(birthday);
        return birthday.toString();
    }
}

Step5:?jiǎn)?dòng) Tomcat 服務(wù)器,運(yùn)行程序;

在這里插入圖片描述

在這里插入圖片描述

案例二:注冊(cè)一個(gè) Student 對(duì)象,前端頁面按照 “id-name-age” 的形式輸入 String 類型的數(shù)據(jù),通過轉(zhuǎn)換器,可以將該 String 類型的數(shù)據(jù)直接轉(zhuǎn)換為 Student 對(duì)象。

1、創(chuàng)建 Student 實(shí)體類;

package com.trainingl.entity;

public class Student {
    private Long id;
    private String name;
    private Integer age;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

2、創(chuàng)建 StudentConverter 轉(zhuǎn)換器;

import com.trainingl.entity.Student;
import org.springframework.core.convert.converter.Converter;

public class StudentConverter implements Converter<String, Student> {
    @Override
    public Student convert(String s) {
        //處理字符串信息
        String[] args = s.split("-");
        Student student = new Student();
        student.setId(Long.parseLong(args[0]));
        student.setName(args[1]);
        student.setAge(Integer.parseInt(args[2]));
        return student;
    }
}

3、springmvc.xml 中配置 StudentConverter 轉(zhuǎn)換器;

<!-- 配置自定義轉(zhuǎn)換器 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="com.trainingl.converter.DateConverter">
                <constructor-arg type="java.lang.String" value="yyyy-MM-dd"></constructor-arg>
            </bean>
            <bean class="com.trainingl.converter.StudentConverter">
            </bean>
        </list>
    </property>
</bean>

4、創(chuàng)建 addStudent 視圖頁面;

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加新同學(xué)</title>
</head>
<body>
    <form action="/addStu" method="post">
        學(xué)生信息:<input type="text" name="student">(提示:id-name-age)<br/>
        <input type="submit" value="提交">
    </form>
</body>
</html>

5、創(chuàng)建業(yè)務(wù)方法;

@Controller
public class StudentHandler {

    @RequestMapping("/addStu")
    @ResponseBody
    public String addStudent(Student student){
        System.out.println(student);
        return student.toString();
    }
}

啟動(dòng) Tomcat 服務(wù)器,運(yùn)行程序:

在這里插入圖片描述

從返回的結(jié)果中看出,輸入的字符串信息被成功解析成了 Java 對(duì)象。

在這里插入圖片描述

總結(jié):我們知道 http 表單中的所有請(qǐng)求參數(shù)都是 String 類型的,如果業(yè)務(wù)參數(shù)是 String 或者 int 類型,HandlerAdapter 組件可以自動(dòng)完成數(shù)據(jù)轉(zhuǎn)換,但如果參數(shù)是其他數(shù)據(jù)類型,比如:格式化字符串等,HandlerAdapter 是不能自動(dòng)將 String 類型轉(zhuǎn)換為 Date 類型或JavaBean 的,這時(shí)就需要開發(fā)者手動(dòng)的創(chuàng)建自定義數(shù)據(jù)轉(zhuǎn)換器。

到此這篇關(guān)于Spring MVC 自定義數(shù)據(jù)轉(zhuǎn)換器的文章就介紹到這了,更多相關(guān)Spring MVC 自定義數(shù)據(jù)轉(zhuǎn)換器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java基礎(chǔ)教程之繼承詳解

    Java基礎(chǔ)教程之繼承詳解

    這篇文章主要介紹了Java基礎(chǔ)教程之繼承詳解,繼承是除組合(composition)之外,提高代碼重復(fù)可用性(reusibility)的另一種重要方式,本文對(duì)繼承做了詳細(xì)講解,需要的朋友可以參考下
    2014-08-08
  • java servlet手機(jī)app訪問接口(二)短信驗(yàn)證

    java servlet手機(jī)app訪問接口(二)短信驗(yàn)證

    這篇文章主要介紹了java servlet手機(jī)app訪問接口(二),短信驗(yàn)證,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Redis結(jié)合AOP與自定義注解實(shí)現(xiàn)分布式緩存流程詳解

    Redis結(jié)合AOP與自定義注解實(shí)現(xiàn)分布式緩存流程詳解

    項(xiàng)目中如果查詢數(shù)據(jù)是直接到MySQL數(shù)據(jù)庫中查詢的話,會(huì)查磁盤走IO,效率會(huì)比較低,所以現(xiàn)在一般項(xiàng)目中都會(huì)使用緩存,目的就是提高查詢數(shù)據(jù)的速度,將數(shù)據(jù)存入緩存中,也就是內(nèi)存中,這樣查詢效率大大提高
    2022-11-11
  • 解決dubbo啟動(dòng)報(bào)服務(wù)注冊(cè)失敗Failed?to?register?dubbo

    解決dubbo啟動(dòng)報(bào)服務(wù)注冊(cè)失敗Failed?to?register?dubbo

    這篇文章主要介紹了解決dubbo啟動(dòng)報(bào)服務(wù)注冊(cè)失敗Failed?to?register?dubbo問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • IDEA創(chuàng)建javaee項(xiàng)目依賴war exploded變紅失效的解決方案

    IDEA創(chuàng)建javaee項(xiàng)目依賴war exploded變紅失效的解決方案

    在使用IntelliJ IDEA創(chuàng)建JavaEE項(xiàng)目時(shí),可能會(huì)遇到Tomcat部署的warexploded文件出現(xiàn)問題,解決方法是首先刪除有問題的warexploded依賴,然后根據(jù)圖示重新導(dǎo)入項(xiàng)目,此外,調(diào)整虛擬路徑有時(shí)也能有效解決問題
    2024-09-09
  • java的split方法使用示例

    java的split方法使用示例

    這篇文章主要介紹了java的split方法使用示例,需要的朋友可以參考下
    2014-04-04
  • mybatis-plus使用xml自定義sql語句方式

    mybatis-plus使用xml自定義sql語句方式

    這篇文章主要介紹了mybatis-plus使用xml自定義sql語句方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java中有關(guān)構(gòu)造方法中的輸出

    java中有關(guān)構(gòu)造方法中的輸出

    這篇文章主要介紹了java中有關(guān)構(gòu)造方法中的輸出,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java實(shí)現(xiàn)簡(jiǎn)單的迷宮游戲詳解

    Java實(shí)現(xiàn)簡(jiǎn)單的迷宮游戲詳解

    迷宮游戲作為經(jīng)典的小游戲,一直深受大家的喜愛。本文小編將為大家詳細(xì)介紹一下如何用Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的迷宮小游戲,感興趣的可以動(dòng)手試一試
    2022-02-02
  • Java 值傳遞和引用傳遞詳解及實(shí)例代碼

    Java 值傳遞和引用傳遞詳解及實(shí)例代碼

    這篇文章主要介紹了 Java 值傳遞和引用傳遞詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評(píng)論

博客| 罗甸县| 崇信县| 商都县| 商都县| 朝阳市| 洞头县| 宁河县| 惠水县| 临城县| 民丰县| 红河县| 昌乐县| 肃南| 达尔| 达尔| 山西省| 皋兰县| 湖北省| 礼泉县| 介休市| 当阳市| 兴业县| 普定县| 克拉玛依市| 绥棱县| 若尔盖县| 瓦房店市| 汪清县| 禄劝| 太仓市| 元朗区| 兴义市| 鄱阳县| 石河子市| 太仆寺旗| 南靖县| 宝清县| 武山县| 芒康县| 梅河口市|