亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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類:

需要實現(xiàn)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()+"";
}

數(shù)據(jù)實體:

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

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

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

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

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

{
    "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格式傳遞參數(shù),可以正常轉換。 如下:

@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()+"";
    }

數(shù)據(jù)類:

@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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java實現(xiàn)哈夫曼文件解壓縮

    java實現(xiàn)哈夫曼文件解壓縮

    這篇文章主要為大家詳細介紹了java實現(xiàn)哈夫曼文件解壓縮,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Java實現(xiàn)HTTP請求的4種方式總結

    Java實現(xiàn)HTTP請求的4種方式總結

    這篇文章主要給大家介紹了關于Java實現(xiàn)HTTP請求的4種方式,在java開發(fā)中,經常遇到需要調用第三方提供的接口服務的需求,文中給出了詳細的代碼示例,需要的朋友可以參考下
    2023-08-08
  • 詳解Springboot 注入裝配到IOC容器方式

    詳解Springboot 注入裝配到IOC容器方式

    今天通過實例代碼給大家介紹了Springboot 注入裝配到IOC容器方式,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,感興趣的朋友跟隨小編一起看看吧
    2021-10-10
  • java隨機字符串生成示例

    java隨機字符串生成示例

    這篇文章主要介紹了java隨機字符串生成示例,這個字符隨機生成類可以生成多種組合的字符串,比如大+小字符+數(shù)字+符號,需要的朋友可以參考下
    2014-03-03
  • SpringBoot整合Kafka完成生產消費的方案

    SpringBoot整合Kafka完成生產消費的方案

    網上找了很多管理kafka整合springboot的教程,但是很多都沒辦法應用到生產環(huán)境,很多配置都是缺少,或者不正確的,只能當個demo,所以本文給大家介紹了SpringBoot整合Kafka完成生產消費的方案,需要的朋友可以參考下
    2024-12-12
  • Java rmi遠程方法調用基本用法解析

    Java rmi遠程方法調用基本用法解析

    這篇文章主要介紹了Java rmi遠程方法調用基本用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Java 序列化詳解及簡單實現(xiàn)實例

    Java 序列化詳解及簡單實現(xiàn)實例

    這篇文章主要介紹了 Java 序列化詳解及簡單實現(xiàn)實例的相關資料,使用序列化目的:以某種存儲形式使自定義對象持久化,將對象從一個地方傳遞到另一個地方,需要的朋友可以參考下
    2017-03-03
  • 一文帶你搞懂什么是BIO

    一文帶你搞懂什么是BIO

    BIO英文全名是 blocking IO,也叫做 阻塞IO,是最容易理解、最容易實現(xiàn)的IO工作方式,本文就來通過一些簡單的示例為大家講講什么是BIO吧
    2023-06-06
  • 快速使用IDEA圖形化界面連接Phoenix的方法

    快速使用IDEA圖形化界面連接Phoenix的方法

    最近很多朋友跟小編留言如何使用IDEA圖形化界面連接Phoenix,在這小編就不一一回復大家了,今天抽空給大家整理一篇教程關于idea 圖形化界面連接Phoenix的相關知識,需要的朋友快來學習下吧
    2021-05-05
  • 微信公眾號獲取access_token的方法實例分析

    微信公眾號獲取access_token的方法實例分析

    這篇文章主要介紹了微信公眾號獲取access_token的方法,結合實例形式分析了java實現(xiàn)微信公眾號獲取access_token的相關原理、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下
    2019-10-10

最新評論