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

SpringBoot中Formatter和Converter用法和區(qū)別小結

 更新時間:2023年07月06日 08:41:27   作者:freesOcean  
本文主要介紹了SpringBoot中Formatter和Converter用法和區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

功能區(qū)別:

兩者的作用一樣,都是類型轉換。

  • org.springframework.format.Formatter只能做String類型到其他類型的轉換。
  • org.springframework.core.convert.converter.Converter可以做任意類型的轉換。

Converter是一般工具,可以將一種類型轉換成另一種類型。例如,將String轉換成Date,或者將Long轉換成Date。Converter既可以用在web層,也可以用在其它層中。Formatter只能將String轉成成另一種java類型。例如,將String轉換成Date,但它不能將Long轉換成Date。

Formatter

Formatter使用示例:

1.定義Formatter類:

需要實現Formatter接口, 并在pase方法中進行轉換的邏輯。通過@Component自動將其添加到SpringBoot容器,這樣就會自動生效。

@Component
public class StudentFormatter implements Formatter<Student> {
    /**
     * 校驗不太嚴密,僅作演示
     */
    @Override
    public Student parse(String text, Locale locale) {
        if (NumberUtils.isParsable(text)) {
            Student s =  new Student();
            s.setAge(Integer.parseInt(text));
            return s;
        }
        return null;
    }
    @Override
    public String print(Student money, Locale locale) {
        if (money == null) {
            return null;
        }
        return money.getAge()+"";
    }
}

2.Controller中的代碼:

@PostMapping(path = "/stu")
@ResponseBody
public String sst(NewRequest newCoffee) {
    return newCoffee.getStudent().getAge()+"";
}

數據實體:

@Getter
@Setter
@ToString
public class NewRequest {
    private String name;
    private Student student;
}

3.訪問:http://localhost:8080/stu

采用application/x-www-form-urlencoded 參數類型傳遞參數。

這樣服務端收到參數,就會自動將字符串轉換成一個Student對象。

注意點:這里采用了application/x-www-form-urlencoded提交參數,所以在Controller中不能加@RequestBody,并且參數名稱要和數據對象的屬性保持一致。如果采用json格式數據交互,測試發(fā)現解析報錯。

{
    "timestamp": "2019-09-05T07:42:00.809+0000",
    "status": 400,
    "error": "Bad Request",
    "message": "JSON parse error: Current token (VALUE_STRING) not numeric, can not use numeric value accessors; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Current token (VALUE_STRING) not numeric, can not use numeric value accessors\n at [Source: (PushbackInputStream); line: 1, column: 29] (through reference chain: geektime.spring.springbucks.waiter.controller.request.NewCoffeeRequest[\"price\"])",
    "path": "/coffee/addJson"
}

說明在轉換成自定義的對象時,必須通過form格式進行傳參。

但奇怪的是Date類型的轉換,通過json格式傳遞參數,可以正常轉換。 如下:

@Component
public class DateFormatter implements Formatter<Date> {
    @Override
    public Date parse(String text, Locale locale) throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        System.out.println("parse input text: " + text);
        System.out.println("parse date: " + dateFormat.parse(text));
        return dateFormat.parse(text);
    }
    @Override
    public String print(Date object, Locale locale) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        System.out.println("print method." + object);
        return dateFormat.format(object);
    }
}

Controller中:

    @ResponseBody
    @PostMapping(path = "/date")
    public String formatterStringToDate(@RequestBody ZXRequest date) {
        System.out.println("action method: " + date.getDate().getTime());
        return date.getDate().getTime()+"";
    }

數據類:

@Getter
@Setter
@ToString
public class ZXRequest {
    private Date date;
}

訪問:

可以正常返回。說明轉換正確。關于原因,目前尚不清楚,有知道的,希望留言。

Converter使用示例:

1.創(chuàng)建轉換類:其他步驟和Formatter完全一樣。

@Component
public class StudentConvert implements Converter<String ,Student> {
    @Override
    public Student convert(String text) {
        if (NumberUtils.isParsable(text)) {
            Student s =  new Student();
            s.setAge(Integer.parseInt(text));
            return s;
        }
        return new Student();
    }
}

如果同時定義了Converter和Formatter,并且轉換同一個類型,會采用哪個進行轉換?

測試證明,同時定義Student的轉換類,會采用Formatter。

到此這篇關于SpringBoot中Formatter和Converter用法和區(qū)別小結的文章就介紹到這了,更多相關SpringBoot Formatter Converter 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JDK17前后寫法超詳細對比(差點沒認出是Java)

    JDK17前后寫法超詳細對比(差點沒認出是Java)

    在實際應用中,開發(fā)人員可以根據項目需求選擇合適的JDK版本,例如,對于需要高運行效率和低延遲的應用,可以選擇最新版本的JDK,以便獲得更好的性能和特性支持,這篇文章主要介紹了JDK17前后寫法超詳細對比的相關資料,需要的朋友可以參考下
    2026-04-04
  • JDK的Parser來解析Java源代碼詳解

    JDK的Parser來解析Java源代碼詳解

    這篇文章主要介紹了JDK的Parser來解析Java源代碼的相關資料,需要的朋友可以參考下
    2016-09-09
  • 詳細總結IDEA中打jar包的兩種方式

    詳細總結IDEA中打jar包的兩種方式

    發(fā)現有很多小伙伴都不會用IDEA打jar包,今天給大家詳細總結了兩種IDEA打jar包的方式,對正在學習IDEA使用的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05
  • zookeeper服務優(yōu)化的一些建議

    zookeeper服務優(yōu)化的一些建議

    今天小編就為大家分享一篇關于zookeeper服務優(yōu)化的一些建議,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Java抽獎算法第二例

    Java抽獎算法第二例

    這篇文章主要為大家詳細介紹了Java抽獎算法,根據概率將獎品劃分區(qū)間,每個區(qū)間代表一個獎品,然后抽取隨機數,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • mybatis-flex實現多數據源操作

    mybatis-flex實現多數據源操作

    MyBaits-Flex內置了功能完善的多數據源支持,本文主要介紹了mybatis-flex實現多數據源操作,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • 基于Java中最常用的集合類框架之HashMap(詳解)

    基于Java中最常用的集合類框架之HashMap(詳解)

    下面小編就為大家?guī)硪黄贘ava中最常用的集合類框架之HashMap(詳解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Java 字符串截取及常見場景與方法詳解

    Java 字符串截取及常見場景與方法詳解

    在 Java 開發(fā)中,截取字符串是一個非常常見的操作,無論是獲取文件名還是提取某些特定內容,本文詳細介紹了截取字符串最后一位及其他常見截取操作的多種方法,幫助開發(fā)者快速上手,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Java 獲取本機IP地址的方法的兩種方法

    Java 獲取本機IP地址的方法的兩種方法

    本文主要介紹了Java 獲取本機IP地址的方法的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • 深入解析SpringBoot自動配置原理

    深入解析SpringBoot自動配置原理

    這篇文章主要介紹了深入解析SpringBoot自動配置原理,SpringBoot?的一大好處就是:大大簡化了?Spring?和其他框架的整合配置,為了簡化配置文件使開發(fā)者更專注于業(yè)務編碼,可以使用?SpringBoot?來進行?Web?開發(fā),需要的朋友可以參考下
    2023-11-11

最新評論

伊川县| 高青县| 潍坊市| 措美县| 凤凰县| 杭锦后旗| 育儿| 获嘉县| 新源县| 阿巴嘎旗| 南开区| 开鲁县| 平湖市| 大安市| 寿阳县| 五台县| 宁国市| 麻城市| 上杭县| 闻喜县| 永吉县| 武冈市| 碌曲县| 新巴尔虎左旗| 津南区| 长子县| 盐津县| 万载县| 东乡| 资兴市| 施秉县| 阿拉善右旗| 阳江市| 南通市| 梨树县| 元氏县| 长白| 大洼县| 宁夏| 云霄县| 宜都市|