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

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提供了很多默認的editor,我們也可以通過繼承PropertyEditorSupport實現(xiàn)自己定制化的editor。

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

您可能感興趣的文章:

相關(guān)文章

  • Struts之logic標簽庫詳解

    Struts之logic標簽庫詳解

    本文就Struts之logic標簽庫進行詳細介紹,需要的朋友可以參考下
    2012-11-11
  • 詳解Android系統(tǒng)中的root權(quán)限獲得原理

    詳解Android系統(tǒng)中的root權(quán)限獲得原理

    這篇文章主要介紹了詳解Android系統(tǒng)中的Root權(quán)限獲得原理,安卓基于Linux,所以原理也相當于Linux中的root用戶,需要的朋友可以參考下
    2015-08-08
  • Java中的javaBean、vo、entity、domain和pojo

    Java中的javaBean、vo、entity、domain和pojo

    這篇文章主要介紹了Java中的javaBean、vo、entity、domain和pojo用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Spring?Boot中的max-http-header-size配置方式

    Spring?Boot中的max-http-header-size配置方式

    這篇文章主要介紹了Spring?Boot中的max-http-header-size配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Java與Http協(xié)議的詳細介紹

    Java與Http協(xié)議的詳細介紹

    這篇文章主要介紹了Java與Http協(xié)議的詳細介紹的相關(guān)資料,這里提供實例來幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • SpringDataElasticsearch與SpEL表達式實現(xiàn)ES動態(tài)索引

    SpringDataElasticsearch與SpEL表達式實現(xiàn)ES動態(tài)索引

    這篇文章主要介紹了SpringDataElasticsearch與SpEL表達式實現(xiàn)ES動態(tài)索引,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • 關(guān)于Feign的覆寫默認配置和Feign的日志

    關(guān)于Feign的覆寫默認配置和Feign的日志

    這篇文章主要介紹了關(guān)于Feign的覆寫默認配置和Feign的日志方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java8新特性Lambda表達式的一些復(fù)雜用法總結(jié)

    Java8新特性Lambda表達式的一些復(fù)雜用法總結(jié)

    lambda表達式是JAVA8中提供的一種新的特性,它支持Java也能進行簡單的“函數(shù)式編程”。 下面這篇文章主要給大家介紹了關(guān)于Java8新特性Lambda表達式的一些復(fù)雜用法的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • Spring bean生命周期配置過程解析

    Spring bean生命周期配置過程解析

    這篇文章主要介紹了Spring bean生命周期配置過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Java?熱更新?Groovy?實踐及踩坑指南(推薦)

    Java?熱更新?Groovy?實踐及踩坑指南(推薦)

    Apache的Groovy是Java平臺上設(shè)計的面向?qū)ο缶幊陶Z言,這門動態(tài)語言擁有類似Python、Ruby和Smalltalk中的一些特性,可以作為Java平臺的腳本語言使用,這篇文章主要介紹了Java?熱更新?Groovy?實踐及踩坑指南,需要的朋友可以參考下
    2022-09-09

最新評論

罗平县| 鱼台县| 武功县| 洪雅县| 肥西县| 台前县| 嘉黎县| 临海市| 玉门市| 常州市| 济源市| 蕉岭县| 毕节市| 台湾省| 黔南| 葫芦岛市| 肥乡县| 东丰县| 嵊州市| 清流县| 绍兴市| 突泉县| 中西区| 马关县| 四会市| 伊春市| 富裕县| 乌苏市| 绥江县| 禹州市| 盖州市| 清水县| 美姑县| 明光市| 塔城市| 武穴市| 太仆寺旗| 曲阳县| 昭觉县| 漳州市| 玉树县|