天天看点

Spring Boot:定制PropertyEditors

在编写控制器中的action方法时,spring允许我们使用具体的数据类型定义函数签名,这是通过propertyeditor实现的。propertyeditor本来是jdk提供的api,用于将文本值转换成给定的类型,结果spring的开发人员发现它恰好满足spring的需求——将url参数转换成函数的参数类型。

针对常用的类型(boolean、currency和class),spring mvc已经提供了很多propertyeditor实现。假设我们需要创建一个isbn类并用它作为函数中的参数。

考虑到propertyeditor属于工具范畴,选择在项目根目录下增加一个包——utils。在这个包下定义isbn类和isbneditor类,各自代码如下:

isbn类:

isbneditor类,继承propertyeditorsupport类,setastext完成字符串到具体对象类型的转换,getastext完成具体对象类型到字符串的转换。

在bookcontroller中增加initbinder函数,通过@initbinder注解修饰,则可以针对每个web请求创建一个editor实例。

修改bookcontroller中对应的函数

运行程序,通过httpie访问<code>http localhost:8080/books/9781-1234-1111</code>,可以得到正常结果,跟之前用string表示isbn时没什么不同,说明我们编写的isbneditor已经起作用了。

spring提供了很多默认的editor,我们也可以通过继承propertyeditorsupport实现自己定制化的editor。

由于properteyeditor是非线程安全的。通过@initbinder注解修饰的initbinder函数,会为每个web请求初始化一个editor实例,并通过webdatabinder对象注册。