轉換器屬于什么類別,Spring MVC Converter(類型轉換器)詳解

 2023-10-06 阅读 28 评论 0

摘要:Spring MVC 框架的 Converter<S,T> 是一個可以將一種數據類型轉換成另一種數據類型的接口,這里 S 表示源類型,T 表示目標類型。開發者在實際應用中使用框架內置的類型轉換器基本上就夠了,但有時需要編寫具有特定功能的類型轉換器。 內置的類

Spring MVC 框架的 Converter<S,T> 是一個可以將一種數據類型轉換成另一種數據類型的接口,這里 S 表示源類型,T 表示目標類型。開發者在實際應用中使用框架內置的類型轉換器基本上就夠了,但有時需要編寫具有特定功能的類型轉換器。

內置的類型轉換器

在 Spring MVC 框架中,對于常用的數據類型,開發者無須創建自己的類型轉換器,因為 Spring MVC 框架有許多內置的類型轉換器用于完成常用的類型轉換。Spring MVC 框架提供的內置類型轉換包括以下幾種類型。

1)標量轉換器
在這里插入圖片描述

2)集合、數組相關轉換器

轉換器屬于什么類別?在這里插入圖片描述
類型轉換是在視圖與控制器相互傳遞數據時發生的。Spring MVC 框架對于基本類型(例如 int、long、float、double、boolean 以及 char 等)已經做好了基本類型轉換。例如,對于 addGoods.jsp 的提交請求,可以由以下處理方法來接收請求參數并處理:

package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Goodsontroller {@RequestMapping("/addGoods")public String add(String goodsname, double goodsprice, int goodsnumber) {double total = goodsprice * goodsnumber;System.out.println(total);return "success";}
}

注意:在使用內置類型轉換器時,請求參數輸入值與接收參數類型要兼容,否則會報 400 錯誤。請求參數類型與接收參數類型不兼容問題需要學習輸入校驗后才可解決。

自定義類型轉換器

當 Spring MVC 框架內置的類型轉換器不能滿足需求時,開發者可以開發自己的類型轉換器。

例如有一個應用 springMVCDemo03 希望用戶在頁面表單中輸入信息來創建商品信息。當輸入“apple,10.58,200”時表示在程序中自動創建一個 new Goods,并將“apple”值自動賦給 goodsname 屬性,將“10.58”值自動賦給 goodsprice 屬性,將“200”值自動賦給 goodsnumber 屬性。

springMVCDemo03 應用與 springMVCDemo02 具有相同的 JAR 包、web.xml。

java clob類型,如果想實現上述應用,需要做以下 5 件事:

  • 創建實體類。
  • 創建控制器類。
  • 創建自定義類型轉換器類。
  • 注冊類型轉換器。
  • 創建相關視圖。

按照上述步驟采用自定義類型轉換器完成需求。

1)創建實體類

在 springMVCDemo03 的 src 目錄下創建 pojo 包,并在該包中創建名為 GoodsModel 的實體類,代碼如下:

package pojo;
public class GoodsModel {private String goodsname;private double goodsprice;private int goodsnumber;// 省略setter和getter方法
}

2)創建控制器類

java convert?在 springMVCDemo03 的 src 目錄下創建 controller 包,并在該包中創建名為 ConverterController 的控制器類,代碼如下:

package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import pojo.GoodsModel;
@Controller
@RequestMapping("/my")
public class ConverterController {@RequestMapping("/converter")/** 使用@RequestParam* ("goods")接收請求參數,然后調用自定義類型轉換器GoodsConverter將字符串值轉換為GoodsModel的對象gm*/public String myConverter(@RequestParam("goods") GoodsModel gm, Model model) {model.addAttribute("goods", gm);return "showGoods";}
}

3)創建自定義類型轉換器類

自定義類型轉換器類需要實現 Converter<S,T> 接口,重寫 convert(S) 接口方法。

convert(S) 方法的功能是將源數據類型 S 轉換成目標數據類型 T。在 springMVCDemo03 的 src 目錄下創建 converter 包,并在該包中創建名為GoodsConverter 的自定義類型轉換器類,代碼如下:

package converter;
import org.springframework.core.convert.converter.Converter;
import pojo.GoodsModel;
public class GoodsConverter implements Converter<String, GoodsModel> {public GoodsModel convert(String source) {// 創建一個Goods實例GoodsModel goods = new GoodsModel();// 以“,”分隔String stringvalues[] = source.split(",");if (stringvalues != null && stringvalues.length == 3) {// 為Goods實例賦值goods.setGoodsname(stringvalues[0]);goods.setGoodsprice(Double.parseDouble(stringvalues[1]));goods.setGoodsnumber(Integer.parseInt(stringvalues[2]));return goods;} else {throw new IllegalArgumentException(String.format("類型轉換失敗, 需要格式'apple, 10.58,200 ',但格式是[% s ] ", source));}}
}

4)注冊類型轉換器

轉換器原理、在 springMVCDemo03 的 WEB-INF 目錄下創建配置文件 springmvc-servlet.xml,并在配置文件中注冊自定義類型轉換器,配置文件代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 使用掃描機制掃描控制器類,控制器類都在controller包及其子包下 --><context:component-scan base-package="controller" /><!--注冊類型轉換器GoodsConverter--><bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><list><bean class="converter.GoodsConverter"/></list></property></bean><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean>
</beans>

5)創建相關視圖

在 springMVCDemo03 應用的 WebContent 目錄下創建信息采集頁面 input.jsp,核心代碼如下:

<form action="${pageContext.request.contextPath}/my/converter" method= "post">請輸入商品信息(格式為apple, 10.58,200:<input type="text" name="goods" /><br><input type="submit" value="提交" />
</form>

在 springMVCDemo03 應用的 /WEB-INF/jsp 目錄下創建信息顯示頁面 showGoods.jsp,核心代碼如下:

<body>您創建的商品信息如下:<!-- 使用EL表達式取出model中的goods信息 -->商品名稱為:${goods.goodsname }商品價格為:${goods.goodsprice }商品名稱為:${goods.goodsnumber }
</body>

最后,使用地址“ http://localhost:8080/springMVCDemo03 /input.jsp ”測試應用。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/120967.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息