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

Spring Boot項(xiàng)目中定制PropertyEditors方法

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

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

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

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

實(shí)戰(zhàn)

考慮到PropertyEditor屬于工具范疇,選擇在項(xiàng)目根目錄下增加一個(gè)包——utils。在這個(gè)包下定義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完成字符串到具體對(duì)象類型的轉(zhuǎn)換,getAsText完成具體對(duì)象類型到字符串的轉(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ù),通過(guò)@InitBinder注解修飾,則可以針對(duì)每個(gè)web請(qǐng)求創(chuàng)建一個(gè)editor實(shí)例。

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

修改BookController中對(duì)應(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;
}

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

分析

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

由于ProperteyEditor是非線程安全的。通過(guò)@InitBinder注解修飾的initBinder函數(shù),會(huì)為每個(gè)web請(qǐng)求初始化一個(gè)editor實(shí)例,并通過(guò)WebDataBinder對(duì)象注冊(cè)。

您可能感興趣的文章:

相關(guān)文章

  • Struts之logic標(biāo)簽庫(kù)詳解

    Struts之logic標(biāo)簽庫(kù)詳解

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

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

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

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

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

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

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

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

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

    SpringDataElasticsearch與SpEL表達(dá)式實(shí)現(xiàn)ES動(dòng)態(tài)索引

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

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

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

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

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

    Spring bean生命周期配置過(guò)程解析

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

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

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

最新評(píng)論

祁连县| 云阳县| 大方县| 纳雍县| 神木县| 扶绥县| 石阡县| 华亭县| 赞皇县| 德保县| 西和县| 施甸县| 玉溪市| 宣恩县| 桂平市| 延长县| 吉木萨尔县| 乐陵市| 丰台区| 色达县| 噶尔县| 绿春县| 颍上县| 郯城县| 曲松县| 察雅县| 确山县| 肇州县| 黄冈市| 嘉峪关市| 博客| 武汉市| 富阳市| 峨眉山市| 遂溪县| 姚安县| 钟祥市| 苏尼特右旗| 商丘市| 久治县| 长泰县|