中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot定制type Formatters有什么用

發布時間:2021-07-15 11:28:09 來源:億速云 閱讀:151 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關Spring Boot定制type Formatters有什么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

PropertyEditors是用來將文本類型轉換成指定的Java類型,不過,考慮到PropertyEditor的無狀態和非線程安全特性,Spring 3增加了一個Formatter接口來替代它。Formatters提供和PropertyEditor類似的功能,但是提供線程安全特性,也可以實現字符串和對象類型的互相轉換。

假設在我們的程序中,需要根據一本書的ISBN字符串得到對應的book對象。通過這個類型格式化工具,我們可以在控制器的方法簽名中定義Book參數,而URL參數只需要包含ISBN號和數據庫ID。

實戰

  • 首先在項目根目錄下創建formatters包

  • 然后創建BookFormatter,它實現了Formatter接口,實現兩個函數:parse用于將字符串ISBN轉換成book對象;print用于將book對象轉換成該book對應的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<Book> {
 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)函數。

@Autowired
private BookRepository bookRepository;

@Override
public void addFormatters(FormatterRegistry registry) {
 registry.addFormatter(new BookFormatter(bookRepository));
}

最后,需要在BookController中新加一個函數getReviewers,根據一本書的ISBN號獲取該書的審閱人。

@RequestMapping(value = "/{isbn}/reviewers", method = RequestMethod.GET)
public List<Reviewer> getReviewers(@PathVariable("isbn") Book book) {
 return book.getReviewers();
}

通過mvn spring-boot:run運行程序

通過httpie訪問URL——http://localhost:8080/books/9781-1234-1111/reviewers,得到的結果如下:

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工具的目標是提供跟PropertyEditor類似的功能。通過FormatterRegistry將我們自己的formtter注冊到系統中,然后Spring會自動完成文本表示的book和book實體對象之間的互相轉換。由于Formatter是無狀態的,因此不需要為每個請求都執行注冊formatter的動作。

使用建議:如果需要通用類型的轉換——例如String或Boolean,最好使用PropertyEditor完成,因為這種需求可能不是全局需要的,只是某個Controller的定制功能需求。

我們在WebConfiguration中引入(@Autowired)了BookRepository(需要用它創建BookFormatter實例),Spring給配置文件提供了使用其他bean對象的能力。Spring本身會確保BookRepository先創建,然后在WebConfiguration類的創建過程中引入。

感謝各位的閱讀!關于“Spring Boot定制type Formatters有什么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洞头县| 雷州市| 武宣县| 昔阳县| 拉萨市| 常宁市| 辉县市| 招远市| 军事| 惠州市| 镇沅| 奉新县| 沁水县| 盐源县| 沂水县| 育儿| 无锡市| 翁源县| 泾源县| 北宁市| 瑞丽市| 藁城市| 隆昌县| 略阳县| 马关县| 凤山市| 肥西县| 云南省| 花垣县| 进贤县| 南通市| 虎林市| 韩城市| 肥西县| 高雄市| 淮滨县| 西青区| 饶平县| 勃利县| 文安县| 汤阴县|