温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring Boot定制type Formatters有什么用

发布时间:2021-07-15 11:28:09 来源:亿速云 阅读:179 作者:小新 栏目:编程语言

这篇文章给大家分享的是有关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