網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
說(shuō)明與作用
springmvc并不是能對(duì)所有類型的參數(shù)進(jìn)行綁定的,如果對(duì)日期Date類型參數(shù)進(jìn)行綁定,就會(huì)報(bào)錯(cuò)IllegalStateException錯(cuò)誤。所以需要注冊(cè)一些類型綁定器用于對(duì)參數(shù)進(jìn)行綁定。InitBinder注解就有這個(gè)作用。
@Controller
public class InitBinderController {
@RequestMapping("/testInitBinder")
private String testInitBinder(Date date){
System.out.println("date = " + date);
return "RequsetInitBindDemo";
}
}
不能把String類型轉(zhuǎn)換為Date類型報(bào)錯(cuò)。
此時(shí)就需要一個(gè)日期類型轉(zhuǎn)換器。
@InitBinder
public void dateTypeBinder(WebDataBinder webDataBinder){
//往數(shù)據(jù)綁定器中添加一個(gè)DateFormatter日期轉(zhuǎn)化器。
webDataBinder.addCustomFormatter(new DateFormatter("yyyy-mm-dd"));
}
日期類型轉(zhuǎn)換成功了。
InitBinder注解:
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface InitBinder {
//指定參數(shù)名,這個(gè)不知控制器方法上形參的參數(shù)名,而是請(qǐng)求參數(shù)名,可以指定多個(gè)。指定后只有這些參數(shù)需要用到該轉(zhuǎn)換器。如果不指定,默認(rèn)所有。
String[] value() default {};
}
并且使用InitBinder 注冊(cè)的綁定器只有在當(dāng)前Controller中才有效,不會(huì)作用于其他Controller。
在其他controller中定義一個(gè)接收請(qǐng)求的方法。
請(qǐng)求失敗。
使用@ControllerAdvice定義全局綁定器
可以使用@ControllerAdvice定義全局綁定器。ControllerAdvice的使用可以看文章
@ControllerAdvice
public class InitBinderAdviseController {
@InitBinder
public void dateTypeBinder(WebDataBinder webDataBinder){
//往數(shù)據(jù)綁定器中添加一個(gè)DateFormatter日期轉(zhuǎn)化器。
webDataBinder.addCustomFormatter(new DateFormatter("yyyy-mm-dd"));
}
}
結(jié)果:
不同controller的方法都能作用到。
使用其他格式轉(zhuǎn)化器
我們可以自定義格式轉(zhuǎn)化器,實(shí)現(xiàn)Formatter接口就可。還可以添加驗(yàn)證器等等。
public class StringFormatter implements Formatter<String> {
private static final String PREFIX = "convertString == ";
@Override
public String parse(String text, Locale locale) throws ParseException {
//所以String類型參數(shù)都加上一個(gè)前綴。
String result = PREFIX + text;
return result;
}
@Override
public String print(String object, Locale locale) {
return object;
}
}
添加
測(cè)試:
@RequestMapping("/testInitBinder2")
private String testInitBinder1(String name){
System.out.println("name = " + name);
return "RequsetInitBindDemo";
}
結(jié)果:
前綴有了。
原文鏈接:https://blog.csdn.net/qq_43985303/article/details/129520718
- 上一篇:沒(méi)有了
- 下一篇:沒(méi)有了
相關(guān)推薦
- 2022-12-07 C#?XML文件操作之相機(jī)參數(shù)保存和讀取_C#教程
- 2022-05-10 Element-ui 中的 Select 組件用(深度)選擇器修改默認(rèn)樣式不生效的問(wèn)題及如何使用 p
- 2023-02-01 C++泛型編程綜合講解_C 語(yǔ)言
- 2022-06-30 python神經(jīng)網(wǎng)絡(luò)tensorflow利用訓(xùn)練好的模型進(jìn)行預(yù)測(cè)_python
- 2022-04-24 記錄一次nginx啟動(dòng)失敗的解決過(guò)程_nginx
- 2022-10-27 React?State與生命周期詳細(xì)介紹_React
- 2022-05-21 python實(shí)現(xiàn)會(huì)員信息管理系統(tǒng)(List)_python
- 2022-12-12 C++?Boost?Chrono實(shí)現(xiàn)計(jì)時(shí)碼表流程詳解_C 語(yǔ)言
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支