這篇文章給大家分享的是有關(guān)Spring Boot定制type Formatters有什么用的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出寬甸免費(fèi)做網(wǎng)站回饋大家。
PropertyEditors是用來將文本類型轉(zhuǎn)換成指定的Java類型,不過,考慮到PropertyEditor的無狀態(tài)和非線程安全特性,Spring 3增加了一個(gè)Formatter接口來替代它。Formatters提供和PropertyEditor類似的功能,但是提供線程安全特性,也可以實(shí)現(xiàn)字符串和對象類型的互相轉(zhuǎn)換。
假設(shè)在我們的程序中,需要根據(jù)一本書的ISBN字符串得到對應(yīng)的book對象。通過這個(gè)類型格式化工具,我們可以在控制器的方法簽名中定義Book參數(shù),而URL參數(shù)只需要包含ISBN號和數(shù)據(jù)庫ID。
實(shí)戰(zhàn)
首先在項(xiàng)目根目錄下創(chuàng)建formatters包
然后創(chuàng)建BookFormatter,它實(shí)現(xiàn)了Formatter接口,實(shí)現(xiàn)兩個(gè)函數(shù):parse用于將字符串ISBN轉(zhuǎn)換成book對象;print用于將book對象轉(zhuǎn)換成該book對應(yīng)的ISBN字符串。
package com.test.bookpub.formatters; import com.test.bookpub.domain.Book; import com.test.bookpub.repository.BookRepository; import org.springframework.format.Formatter; import java.text.ParseException; import java.util.Locale; public class BookFormatter implements Formatter{ private BookRepository repository; public BookFormatter(BookRepository repository) { this.repository = repository; } @Override public Book parse(String bookIdentifier, Locale locale) throws ParseException { Book book = repository.findBookByIsbn(bookIdentifier); return book != null ? book : repository.findOne(Long.valueOf(bookIdentifier)); } @Override public String print(Book book, Locale locale) { return book.getIsbn(); } }
在WebConfiguration中添加我們定義的formatter,重寫(@Override修飾)addFormatter(FormatterRegistry registry)函數(shù)。
@Autowired private BookRepository bookRepository; @Override public void addFormatters(FormatterRegistry registry) { registry.addFormatter(new BookFormatter(bookRepository)); }
最后,需要在BookController中新加一個(gè)函數(shù)getReviewers,根據(jù)一本書的ISBN號獲取該書的審閱人。
@RequestMapping(value = "/{isbn}/reviewers", method = RequestMethod.GET) public ListgetReviewers(@PathVariable("isbn") Book book) { return book.getReviewers(); }
通過mvn spring-boot:run運(yùn)行程序
通過httpie訪問URL——http://localhost:8080/books/9781-1234-1111/reviewers,得到的結(jié)果如下:
HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Date: Tue, 08 Dec 2015 08:15:31 GMT Server: Apache-Coyote/1.1 Transfer-Encoding: chunked []
分析
Formatter工具的目標(biāo)是提供跟PropertyEditor類似的功能。通過FormatterRegistry將我們自己的formtter注冊到系統(tǒng)中,然后Spring會自動(dòng)完成文本表示的book和book實(shí)體對象之間的互相轉(zhuǎn)換。由于Formatter是無狀態(tài)的,因此不需要為每個(gè)請求都執(zhí)行注冊formatter的動(dòng)作。
使用建議:如果需要通用類型的轉(zhuǎn)換——例如String或Boolean,最好使用PropertyEditor完成,因?yàn)檫@種需求可能不是全局需要的,只是某個(gè)Controller的定制功能需求。
我們在WebConfiguration中引入(@Autowired)了BookRepository(需要用它創(chuàng)建BookFormatter實(shí)例),Spring給配置文件提供了使用其他bean對象的能力。Spring本身會確保BookRepository先創(chuàng)建,然后在WebConfiguration類的創(chuàng)建過程中引入。
感謝各位的閱讀!關(guān)于“Spring Boot定制type Formatters有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!