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

Spring Boot項目中定制PropertyEditors方法

 更新時間:2019年11月10日 09:15:16   作者:javaadu  
在本篇文章里小編給大家分享的是一篇關(guān)于Spring Boot定制PropertyEditors的知識點內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。

在Spring Boot: 定制HTTP消息轉(zhuǎn)換器一文中我們學(xué)習(xí)了如何配置消息轉(zhuǎn)換器用于HTTP請求和響應(yīng)數(shù)據(jù),實際上,在一次請求的完成過程中還發(fā)生了其他的轉(zhuǎn)換,我們這次關(guān)注將參數(shù)轉(zhuǎn)換成多種類型的對象,如:字符串轉(zhuǎn)換成Date對象或字符串轉(zhuǎn)換成Integer對象。

在編寫控制器中的action方法時,Spring允許我們使用具體的數(shù)據(jù)類型定義函數(shù)簽名,這是通過PropertyEditor實現(xiàn)的。PropertyEditor本來是JDK提供的API,用于將文本值轉(zhuǎn)換成給定的類型,結(jié)果Spring的開發(fā)人員發(fā)現(xiàn)它恰好滿足Spring的需求——將URL參數(shù)轉(zhuǎn)換成函數(shù)的參數(shù)類型。

針對常用的類型(Boolean、Currency和Class),Spring MVC已經(jīng)提供了很多PropertyEditor實現(xiàn)。假設(shè)我們需要創(chuàng)建一個Isbn類并用它作為函數(shù)中的參數(shù)。

實戰(zhàn)

考慮到PropertyEditor屬于工具范疇,選擇在項目根目錄下增加一個包——utils。在這個包下定義Isbn類和IsbnEditor類,各自代碼如下:

Isbn類:

package com.test.bookpub.utils;

public class Isbn {
  private String isbn;

  public Isbn(String isbn) {
    this.isbn = isbn;
  }
  public String getIsbn() {
    return isbn;
  }
}

IsbnEditor類,繼承PropertyEditorSupport類,setAsText完成字符串到具體對象類型的轉(zhuǎn)換,getAsText完成具體對象類型到字符串的轉(zhuǎn)換。

package com.test.bookpub.utils;
import org.springframework.util.StringUtils;
import java.beans.PropertyEditorSupport;

public class IsbnEditor extends PropertyEditorSupport {
  @Override
  public void setAsText(String text) throws IllegalArgumentException {
    if (StringUtils.hasText(text)) {
      setValue(new Isbn(text.trim()));
    } else {
      setValue(null);
    }
  }
  @Override  public String getAsText() {
    Isbn isbn = (Isbn) getValue();
    if (isbn != null) {
      return isbn.getIsbn();
    } else {
      return "";
    }
  }
}

在BookController中增加initBinder函數(shù),通過@InitBinder注解修飾,則可以針對每個web請求創(chuàng)建一個editor實例。

@InitBinderpublic 
void initBinder(WebDataBinder binder) {
  binder.registerCustomEditor(Isbn.class, new IsbnEditor());
}

修改BookController中對應(yīng)的函數(shù)

@RequestMapping(value = "/{isbn}", method = RequestMethod.GET)
public Map<String, Object> getBook(@PathVariable Isbn isbn) {
  Book book = bookRepository.findBookByIsbn(isbn.getIsbn());
  Map<String, Object> response = new LinkedHashMap<>();
  response.put("message", "get book with isbn(" + isbn.getIsbn() +")");
  response.put("book", book);  return response;
}

運行程序,通過Httpie訪問http localhost:8080/books/9781-1234-1111,可以得到正常結(jié)果,跟之前用String表示isbn時沒什么不同,說明我們編寫的IsbnEditor已經(jīng)起作用了。

分析

Spring提供了很多默認(rèn)的editor,我們也可以通過繼承PropertyEditorSupport實現(xiàn)自己定制化的editor。

由于ProperteyEditor是非線程安全的。通過@InitBinder注解修飾的initBinder函數(shù),會為每個web請求初始化一個editor實例,并通過WebDataBinder對象注冊。

您可能感興趣的文章:

相關(guān)文章

  • SkyWalking?自定義插件(Spring?RabbitMQ)具體分析過程

    SkyWalking?自定義插件(Spring?RabbitMQ)具體分析過程

    這篇文章主要介紹了SkyWalking?自定義插件(Spring?RabbitMQ)具體分析過程,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Java集合的組內(nèi)平均值的計算方法總結(jié)

    Java集合的組內(nèi)平均值的計算方法總結(jié)

    在Java中,經(jīng)常需要對集合進(jìn)行各種操作,其中之一就是計算集合的組內(nèi)平均值,本文將介紹如何使用Java集合來計算組內(nèi)平均值,并提供一些示例代碼和實用技巧
    2024-08-08
  • 用java實現(xiàn)跳動的小球示例代碼

    用java實現(xiàn)跳動的小球示例代碼

    這篇文章主要介紹了用java實現(xiàn)跳動的小球,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • Java Swing樹狀組件JTree用法實例詳解

    Java Swing樹狀組件JTree用法實例詳解

    這篇文章主要介紹了Java Swing樹狀組件JTree用法,結(jié)合具體實例形式分析了Swing組件JTree構(gòu)成樹狀列表的節(jié)點設(shè)置與事件響應(yīng),以及自定義圖形節(jié)點的相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • SpringMVC之簡單的增刪改查示例(SSM整合)

    SpringMVC之簡單的增刪改查示例(SSM整合)

    本篇文章主要介紹了SpringMVC之簡單的增刪改查示例(SSM整合),這個例子是基于SpringMVC+Spring+Mybatis實現(xiàn)的。有興趣的可以了解一下。
    2017-03-03
  • java實戰(zhàn)之猜字小游戲

    java實戰(zhàn)之猜字小游戲

    這篇文章主要介紹了java實戰(zhàn)之猜字小游戲,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助呦,需要的朋友可以參考下
    2021-04-04
  • redis分布式鎖的原理及代碼實例

    redis分布式鎖的原理及代碼實例

    這篇文章主要介紹了redis分布式鎖的原理及代碼實例,Redis作為一款高性能內(nèi)存數(shù)據(jù)庫,其提供了一種非常實用的分布式鎖解決方案,可以幫助開發(fā)人員輕松地實現(xiàn)分布式鎖功能,對于分布式系統(tǒng)的開發(fā)和維護(hù),具有非常大的實用價值,需要的朋友可以參考下
    2024-01-01
  • springboot vue項目后端列表接口分頁模糊查詢

    springboot vue項目后端列表接口分頁模糊查詢

    這篇文章主要為大家介紹了springboot vue項目后端列表接口分頁模糊查詢,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Java中forward轉(zhuǎn)發(fā)與redirect重定向的區(qū)別

    Java中forward轉(zhuǎn)發(fā)與redirect重定向的區(qū)別

    轉(zhuǎn)發(fā)和重定向都是常用的頁面跳轉(zhuǎn)方式,但在實現(xiàn)上有一些區(qū)別,本文主要介紹了Java中forward轉(zhuǎn)發(fā)與redirect重定向的區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Java編程二項分布的遞歸和非遞歸實現(xiàn)代碼實例

    Java編程二項分布的遞歸和非遞歸實現(xiàn)代碼實例

    這篇文章主要介紹了Java編程二項分布的遞歸和非遞歸實現(xiàn)代碼實例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01

最新評論