博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot:定制type Formatters
阅读量:6863 次
发布时间:2019-06-26

本文共 2255 字,大约阅读时间需要 7 分钟。

考虑到PropertyEditor的无状态和非线程安全特性,Spring 3增加了一个Formatter接口来替代它。Formatters提供和PropertyEditor类似的功能,但是提供线程安全特性,并且专注于完成字符串和对象类型的互相转换。

假设在我们的程序中,需要根据一本书的ISBN字符串得到对应的book对象。通过这个类型格式化工具,我们可以在控制器的方法签名中定义Book参数,而URL参数只需要包含ISBN号和数据库ID。

How Do

  • 首先在项目根目录下创建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
{ 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)函数。
@Autowiredprivate BookRepository bookRepository;@Overridepublic void addFormatters(FormatterRegistry registry) {    registry.addFormatter(new BookFormatter(bookRepository));}
  • 最后,需要在BookController中新加一个函数getReviewers,根据一本书的ISBN号获取该书的审阅人。
@RequestMapping(value = "/{isbn}/reviewers", method = RequestMethod.GET)public List
getReviewers(@PathVariable("isbn") Book book) { return book.getReviewers();}
  • 通过mvn spring-boot:run运行程序
  • 通过httpie访问URL——
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8Date: Tue, 08 Dec 2015 08:15:31 GMTServer: Apache-Coyote/1.1Transfer-Encoding: chunked[]

分析

Formatter工具的目标是提供跟PropertyEditor类似的功能。通过FormatterRegistry将我们自己的formtter注册到系统中,然后Spring会自动完成文本表示的book和book实体对象之间的互相转换。由于Formatter是无状态的,因此不需要为每个请求都执行注册formatter的动作。

使用建议:如果需要通用类型的转换——例如String或Boolean,最好使用PropertyEditor完成,因为这种需求可能不是全局需要的,只是某个Controller的定制功能需求。

我们在WebConfiguration中引入(@Autowired)了BookRepository(需要用它创建BookFormatter实例),Spring给配置文件提供了使用其他bean对象的能力。Spring本身会确保BookRepository先创建,然后在WebConfiguration类的创建过程中引入。

转载地址:http://ofeyl.baihongyu.com/

你可能感兴趣的文章
sass部分知识小结
查看>>
LCS 模板+规定长度的上升子序列个数(数值不同为不同)
查看>>
lua表排序
查看>>
[git]本地分支关联远程分支
查看>>
SQL Server:属性ErrorLogFile 不可用于JobServer“[SERVER]......”的问题时的解决方案
查看>>
浅解多线程(二)
查看>>
div+css
查看>>
国际市场的内容体验调查
查看>>
ASP.NET文件的上传下载提交分页
查看>>
【leetcode】388. Longest Absolute File Path
查看>>
webstorm注册码
查看>>
项目成功先从制定项目计划开始
查看>>
转:String StringBuffer StringBuilder区别
查看>>
浅谈javascript函数,变量声明及作用域
查看>>
lamba表达式和匿名委托
查看>>
Sql Server系列:视图
查看>>
判断现有的类对象是哪一种类的方法
查看>>
hdu3934 凸包
查看>>
Jmeter 接口测试 响应结果中文是Unicode转为中文
查看>>
根据 plist 还原 图片
查看>>