Spring MVC資料格式化(Formatter)
阿新 • • 發佈:2021-08-17
Spring MVC 框架的 Formatter<T> 與 Converter<S, T> 一樣,也是一個可以將一種資料型別轉換成另一種資料型別的介面。不同的是,Formatter 的源型別必須是 String 型別,而 Converter 的源型別可以是任意資料型別。Formatter 更適合 Web 層,而 Converter 可以在任意層中。所以對於需要轉換表單中的使用者輸入的情況,應該選擇 Formatter,而不是 Converter。
在 Web 應用中由 HTTP 傳送的請求資料到控制器中都是以 String 型別獲取,因此在 Web 應用中選擇 Formatter<T> 比選擇 Converter<S, T> 更加合理。
addUser.jsp
showUser.jsp from
http://c.biancheng.net/spring_mvc/formatter.html
在 Web 應用中由 HTTP 傳送的請求資料到控制器中都是以 String 型別獲取,因此在 Web 應用中選擇 Formatter<T> 比選擇 Converter<S, T> 更加合理。
內建的格式化轉換器
Spring MVC 提供了幾個內建的格式化轉換器,具體如下。- NumberFormatter:實現 Number 與 String 之間的解析與格式化。
- CurrencyFormatter:實現 Number 與 String 之間的解析與格式化(帶貨幣符號)。
- PercentFormatter:實現 Number 與 String 之間的解析與格式化(帶百分數符號)。
- DateFormatter:實現 Date 與 String 之間的解析與格式化。
自定義格式化轉換器
自定義格式化轉換器就是編寫一個實現 org.springframework.format.Formatter 介面的 Java 類。該介面宣告如下。- public interface Formatter<T>
- public T parse(String s, java.util.Locale locale)
- public String print(T object, java.util.Locale locale)
示例
下面通過具體應用講解自定義格式化轉換器的用法,本節示例基於《@Controller和@RequestMapping註解》一節中的 springmvcDemo2 程式。1. 建立實體類
建立 net.biancheng.po 包,並在該包中建立 User 實體類,程式碼如下。package net.biancheng.po; import java.util.Date; public class User { private String name; private Integer age; private Double height; private Date createDate; /**省略setter和getter方法*/ }
2. 建立控制器類
建立 net.biancheng.controller 包,並在該包中建立 FormatterController 控制器類,程式碼如下。package net.biancheng.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import net.biancheng.po.User; @Controller public class FormatterController { @RequestMapping("/formatter") public String myFormatter(User us, Model model) { model.addAttribute("user", us); return "showUser"; } }
3. 建立自定義格式化轉換器類
建立 net.biancheng.formatter 包,並在該包中建立 MyFormatter 的自定義格式化轉換器類,程式碼如下。package net.biancheng.formatter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import org.springframework.format.Formatter; import org.springframework.stereotype.Component; @Component public class MyFormatter implements Formatter<Date> { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); public String print(Date object, Locale arg1) { return dateFormat.format(object); } public Date parse(String source, Locale arg1) throws ParseException { return dateFormat.parse(source); // Formatter只能對字串轉換 } }
4. 註冊格式化轉換器
在 springmvc-servlet.xml 配置檔案中註冊格式化轉換器,具體程式碼如下:<!--註冊MyFormatter --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="formatters"> <set> <bean class="net.biancheng.formatter.MyFormatter" /> </set> </property> </bean> <mvc:annotation-driven conversion-service="conversionService" />
5. 建立相關檢視
建立新增使用者頁面 addUser.jsp,程式碼如下。<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>新增使用者</title> </head> <body> <form action="${pageContext.request.contextPath}/formatter" method="post"> 使用者名稱:<input type="text" name="name" /> <br> 年齡:<input type="text" name="age" /> <br> 身高:<input type="text" name="height" /> <br> 建立日期:<input type="text" name="createDate" /> <br> <input type="submit" value="提交" /> </form> </body> </html>建立資訊顯示頁面 showUser.jsp,程式碼如下。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用者資訊</title> </head> <body> 您建立的使用者資訊如下: <br /> <!-- 使用EL表示式取出model中的user資訊 --> 使用者名稱:${user.name } <br /> 年齡:${user.age } <br /> 身高:${user.height } <br /> 建立日期:${user.createDate } </body> </html>
6. 測試執行
訪問地址:http://localhost:8080/springmvcDemo2/addUser。addUser.jsp
showUser.jsp from
http://c.biancheng.net/spring_mvc/formatter.html