day09-1-數據格式化

来源:https://www.cnblogs.com/liyuelian/archive/2023/02/14/17121169.html
-Advertisement-
Play Games

數據格式化 1.基本介紹 說明:在我們提交數據(比如表單時),SpringMVC 是怎樣對提交的數據進行轉換和處理的 基本數據類型可以和字元串之間自動進行轉換,比如:SpringMVC 上下文中內建了很多轉換器,可以完成大多數 java 類型的轉換工作。[相互轉換,這裡只列出部分] Conversi ...


數據格式化

1.基本介紹

說明:在我們提交數據(比如表單時),SpringMVC 是怎樣對提交的數據進行轉換和處理的

基本數據類型可以和字元串之間自動進行轉換,比如:SpringMVC 上下文中內建了很多轉換器,可以完成大多數 java 類型的轉換工作。[相互轉換,這裡只列出部分]

ConversionService converters =
    
java.lang.Boolean-> java.lang.String:org.springframework.core.convert.support.ObjectToStringConverter@f874ca

java.lang.Character -> java.lang.Number : CharacterToNumberFactory@f004c9

java.lang.Character -> java.lang.String : ObjectToStringConverter@68a961

java.lang.Enum -> java.lang.String : EnumToStringConverter@12f060a

java.lang.Number -> java.lang.Character : NumberToCharacterConverter@1482ac5

java.lang.Number -> java.lang.Number : NumberToNumberConverterFactory@126c6f

java.lang.Number -> java.lang.String : ObjectToStringConverter@14888e8

java.lang.String -> java.lang.Boolean : StringToBooleanConverter@1ca6626

java.lang.String -> java.lang.Character : StringToCharacterConverter@1143800

java.lang.String -> java.lang.Enum : StringToEnumConverterFactory@1bba86e

java.lang.String -> java.lang.Number : StringToNumberConverterFactory@18d2c12

java.lang.String -> java.util.Locale : StringToLocaleConverter@3598e1

java.lang.String -> java.util.Properties : StringToPropertiesConverter@c90828

java.lang.String -> java.util.UUID : StringToUUIDConverter@a42f23

java.util.Locale -> java.lang.String : ObjectToStringConverter@c7e20a

java.util.Properties -> java.lang.String : PropertiesToStringConverter@367a7f

java.util.UUID -> java.lang.String : ObjectToStringConverter@112b07f

……

2.基本數據類型和字元串自動轉換

應用實例:基本數據類型可以和字元串之間自動地完成轉換

(1)Monster.java

package com.li.web.datavalid.entity;

/**
 * @author 李
 * @version 1.0
 */
public class Monster {
    private Integer id;
    private String email;
    private Integer age;
    private String name;

    public Monster() {}

    public Monster(Integer id, String email, Integer age, String name) {
        this.id = id;
        this.email = email;
        this.age = age;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

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

(2)data_valid.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>SpringMVC[數據格式/驗證等]</title>
</head>
<body>
<h1>SpringMVC[數據格式/驗證等]</h1>
<hr/>
<a href="<%=request.getContextPath()%>/addMonsterUI">添加妖怪</a>
</body>
</html>

(3)MonsterHandler.java

package com.li.web.datavalid;

import com.li.web.datavalid.entity.Monster;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

/**
 * @author 李
 * @version 1.0
 * MonsterHandler 處理器響應用戶提交數據
 * @Scope(value = "prototype")表示每次請求MonsterHandler都會生成一個新的對象
 */
@Controller
@Scope(value = "prototype")
public class MonsterHandler {
    /**
     * 顯示添加monster的頁面
     * 這裡的 map,當我們向 map添加數據時,會預設存放到 request域中
     * @param map
     * @return
     */
    @RequestMapping(value = "/addMonsterUI")
    public String addMonsterUI(Map<String, Object> map) {
        //如果你跳轉的頁面使用了SpringMVC標簽,就需要準備一個對象放入到request域中,
        //該對象的屬性名要對應SpringMVC的form標簽的modelAttribute的屬性名,否則報錯
        map.put("monster", new Monster());
        return "datavalid/monster_addUI";
    }

    /**
     * SpringMVC可以將提交的數據,按照參數名和形參對象的屬性名匹配,
     * 然後直接封裝到對象中[模型數據]
     * @param monster
     * @return
     */
    @RequestMapping(value = "/save")
    public String save(Monster monster) {
        System.out.println("monster---" + monster);
        return "datavalid/success";
    }
}

(4)monster_addUI.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>
<h3>添加妖怪</h3>
<%--
1. 這裡的表單,我們使用SpringMVC的標簽來完成,目的是方便提示信息的回顯
2. SpringMVC表單標簽在顯示之前,必須在request域中有一個 bean(java對象),
    該 bean的屬性名和表單標簽的欄位要對應!
3. request 域中的 key 為 form 標簽的 modelAttribute的屬性值,比如這裡的 monsters
4.SpringMVC 的 form:form 標簽的 action 屬性值中的 / 不代表 WEB應用的根目錄。
--%>
<form:form action="save" method="post" modelAttribute="monster">
    妖怪id:<form:input path="id"/><br/><br/>
    妖怪名字:<form:input path="name"/><br/><br/>
    妖怪年齡:<form:input path="age"/><br/><br/>
    電子郵件:<form:input path="email"/><br/><br/>
    <input type="submit" value="添加妖怪"/>
</form:form>
</body>
</html>

(5)success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加成功</title>
</head>
<body>
<h1>恭喜你,添加成功</h1>
</body>
</html>

(6)測試

後臺成功拿到了數據,並將 String 類型的字元串轉化為相應的數據類型,賦給 Monster 對象屬性。說明 SpringMVC 底層可以自動進行基本數據類型轉換。

image-20230214191707886

3.特殊數據類型和字元串間的轉換

  1. 特殊數據類型和字元串之間的轉換可以使用註解來完成(比如日期,規定格式的小數比如貨幣形式)
  2. 對於日期和貨幣可以使用 @DataTimeFormat 和 @NumberFormat 註解。

應用實例

(1)修改Monster.java,增加 birthday 和 salary 欄位。修改相應的構造器,getter 和 setter 等。

image-20230214192843967

(2)data_valid.jsp 不變

(3)MonsterHandler.java 不變

(4)修改 monster_addUI.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>
<h3>添加妖怪</h3>
<%--
1. 這裡的表單,我們使用SpringMVC的標簽來完成,目的是方便提示信息的回顯
2. SpringMVC表單標簽在顯示之前,必須在request域中有一個 bean(java對象),
    該 bean的屬性名和表單標簽的欄位要對應!
3. request 域中的 key 為 form 標簽的 modelAttribute的屬性值,比如這裡的 monsters
4.SpringMVC 的 form:form 標簽的 action 屬性值中的 / 不代表 WEB應用的根目錄。
--%>
<form:form action="save" method="post" modelAttribute="monster">
    妖怪id:<form:input path="id"/><br/><br/>
    妖怪名字:<form:input path="name"/><br/><br/>
    妖怪年齡:<form:input path="age"/><br/><br/>
    妖怪生日:<form:input path="birthday"/><br/><br/>
    妖怪工資:<form:input path="salary"/><br/><br/>
    電子郵件:<form:input path="email"/><br/><br/>
    <input type="submit" value="添加妖怪"/>
</form:form>
</body>
</html>

(5)success.jsp 不變

(6)redeployTomcat,進行測試

提交的數據:

image-20230214194159990

後臺輸出:

monster---Monster{id=22, email='[email protected]', age=99, name='king', birthday=Tue Jan 01 00:00:00 CST 1924, salary=124567.22}

如果轉換失敗,將會提示:

Field error in object 'monster' on field 'birthday': rejected value [192401-01]; codes [typeMismatch.monster.birthday,typeMismatch.birthday,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [monster.birthday,birthday]; arguments []; default message [birthday]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'birthday'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.format.annotation.DateTimeFormat java.util.Date] for value '192401-01'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [192401-01]]]

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文翻譯自: Composition in Flutter & Dart 在 Flutter & Dart 中使用組合創建模塊化應用程式。 什麼是組合? 在dictionary.com 中 composition 的定義為:將部分或者元素組合成一個整體的行為。簡單說,組合就像堆樂高積木,我們可以將積 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前言 不知各位朋友現在在web端進行登錄的時候有沒有註意一個變化,以前登錄的時候是直接賬號密碼通過就可以直接登錄,再後來圖形驗證碼,數字結果運算驗證,到現在的拼圖驗證。這一系列的轉變都是為了防止機器操作,但對於我們來說,有億點麻煩,但也沒 ...
  • 字元串解讀 es6加強了對Unicode 的支持,允許\uxxxx的形式展現一個字元,例如: console.log('\u0061'); // 列印 a \u後面的為字元的 Unicode 碼點 \u 後面4位 xxxx 但是這種寫法只識別 \u0000 到 \UFFFF 之間的字元,超出需要使用 ...
  • 閱識風雲是華為雲信息大咖,擅長將複雜信息多元化呈現,其出品的一張圖(雲圖說)、深入淺出的博文(雲小課)或短視頻(雲視廳)總有一款能讓您快速上手華為雲。更多精彩內容請單擊此處。 摘要:本篇雲小課主要指導使用Springboot應用的用戶,快速部署業務到函數工作流FunctionGraph服務。 本文分 ...
  • 我們是袋鼠雲數棧 UED 團隊,致力於打造優秀的一站式數據中台產品。我們始終保持工匠精神,探索前端道路,為社區積累並傳播經驗價值。 前言 單元測試是一種用於測試“單元”的軟體測試方法,其中“單元”的意思是指軟體中各個獨立的組件或模塊。開發者需要為他們的代碼編寫測試用例以確保這些代碼可以正常使用。 在 ...
  • 這是一個投資80億的智能化的稀土廠區規劃項目,2023年年前與該項目的一號負責人進行彙報與交流,年後雙方人員進一步對接。 ...
  • 構造函數和析構函數 構造函數是類的入口函數 析構函數是類的銷毀函數 1、構造函數 a、構造函數預設是public類型的,如果定義private則定義外部不能進行對象的創建,所以只能是公有函數 b、構造函數是入口函數,所以可以進行參數的初始化,可以對部分或全部的函數進行初始化操作 c、構造函數是可以有 ...
  • 驗證以及國際化 1.概述 (1)概述 對於輸入的數據(比如表單數據),進行必要的驗證,並給出相應的提示信息 對於驗證表單數據,SpringMVC 提供了很多使用的註解,這些註解由 JSR 303驗證框架提供。 (2)JSR 303 驗證框架 JSR 303 是 Java 為 Bean 數據合法性校驗 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...