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

Spring Boot定制type Formatters實(shí)例詳解

 更新時(shí)間:2019年11月10日 09:11:54   作者:javaadu  
在本篇文章里小編給大家整理的是關(guān)于Spring Boot定制type Formatters實(shí)例知識點(diǎn),需要的朋友們學(xué)習(xí)下。

前面我們有篇文章介紹了PropertyEditors,是用來將文本類型轉(zhuǎn)換成指定的Java類型,不過,考慮到PropertyEditor的無狀態(tài)和非線程安全特性,Spring 3增加了一個Formatter接口來替代它。Formatters提供和PropertyEditor類似的功能,但是提供線程安全特性,也可以實(shí)現(xiàn)字符串和對象類型的互相轉(zhuǎn)換。

假設(shè)在我們的程序中,需要根據(jù)一本書的ISBN字符串得到對應(yīng)的book對象。通過這個類型格式化工具,我們可以在控制器的方法簽名中定義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)兩個函數(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<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)函數(shù)。

@Autowired
private BookRepository bookRepository;

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

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

@RequestMapping(value = "/{isbn}/reviewers", method = RequestMethod.GET)
public List<Reviewer> getReviewers(@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會自動完成文本表示的book和book實(shí)體對象之間的互相轉(zhuǎn)換。由于Formatter是無狀態(tài)的,因此不需要為每個請求都執(zhí)行注冊formatter的動作。

使用建議:如果需要通用類型的轉(zhuǎn)換——例如String或Boolean,最好使用PropertyEditor完成,因?yàn)檫@種需求可能不是全局需要的,只是某個Controller的定制功能需求。

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

以上就是本次介紹的全部相關(guān)知識點(diǎn)內(nèi)容,感謝大家的學(xué)習(xí)和對腳本之家的支持。

相關(guān)文章

  • 詳解Java泛型中類型擦除問題的解決方法

    詳解Java泛型中類型擦除問題的解決方法

    Java泛型的實(shí)現(xiàn)是不完整的,有時(shí)會遇到一些Java泛型類型擦除的問題。本文將詳細(xì)為大家講解Java泛型中類型擦除問題的解決方法,需要的可以參考一下
    2022-05-05
  • Spring Boot 集成Shiro的多realm配置過程

    Spring Boot 集成Shiro的多realm配置過程

    這篇文章主要介紹了Spring Boot 集成Shiro的多realm配置,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 使用JVMTI實(shí)現(xiàn)SpringBoot的jar加密,防止反編譯

    使用JVMTI實(shí)現(xiàn)SpringBoot的jar加密,防止反編譯

    這篇文章主要介紹了使用JVMTI實(shí)現(xiàn)SpringBoot的jar加密,防止反編譯問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java util concurrent及基本線程原理簡介

    Java util concurrent及基本線程原理簡介

    這篇文章主要介紹了Java util concurrent及基本線程原理簡介,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot工程打包與運(yùn)行的實(shí)現(xiàn)詳解

    SpringBoot工程打包與運(yùn)行的實(shí)現(xiàn)詳解

    本文主要介紹了SpringBoot工程的打包與運(yùn)行的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 深入講解spring boot中servlet的啟動過程與原理

    深入講解spring boot中servlet的啟動過程與原理

    這篇文章主要給大家介紹了關(guān)于spring boot中servlet啟動過程與原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • java實(shí)現(xiàn)雙色球彩票游戲

    java實(shí)現(xiàn)雙色球彩票游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)雙色球彩票游戲,超級簡單的邏輯,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • springboot中使用jpa下hibernate的ddl-auto方式

    springboot中使用jpa下hibernate的ddl-auto方式

    這篇文章主要介紹了springboot中使用jpa下hibernate的ddl-auto方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 淺談SpringBoot項(xiàng)目如何讓前端開發(fā)提高效率(小技巧)

    淺談SpringBoot項(xiàng)目如何讓前端開發(fā)提高效率(小技巧)

    這篇文章主要介紹了淺談SpringBoot項(xiàng)目如何讓前端開發(fā)提高效率(小技巧),主要介紹了Swagger和Nginx提高效率的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • java對象轉(zhuǎn)換String類型的三種方法

    java對象轉(zhuǎn)換String類型的三種方法

    在很多情況下我們都需要將一個對象轉(zhuǎn)換為String類型。一般來說有三種方法可以實(shí)現(xiàn):Object.toString()、(String)Object、String.valueOf(Object)。下面對這三種方法一一分析
    2013-11-11

最新評論