原文鏈接https://zhhll.com.cn/2021/%E6%A1%86%E6%9E%B6/springmvc/%E6%95%B0%E6%8D%AE%E7%BB%91%E5%AE%9A/
數(shù)據(jù)綁定
數(shù)據(jù)綁定流程
- springmvc框架將ServletRequest對象及目標方法的入?yún)嵗齻鬟f給WebDataBinderFactory實例,以創(chuàng)建DataBinder實例對象
- DataBinder調(diào)用裝配在springmvc上下文中的ConversionService組件進行數(shù)據(jù)類型轉(zhuǎn)換、數(shù)據(jù)格式化工作。將Servlet中的請求信息填充到入?yún)ο笾?/li>
- 調(diào)用Vaildator組件對已經(jīng)綁定了請求消息的入?yún)ο筮M行數(shù)據(jù)合法性檢驗,并最終生成數(shù)據(jù)綁定結(jié)果BindingData對象
- springmvc抽取BindingResult中的入?yún)ο蠛托r炲e誤對象,將他們賦給處理方法的響應(yīng)入?yún)?/li>
自定義類型轉(zhuǎn)換器
可通過ConversionServiceFactoryBean的converters屬性注冊自定義的類型轉(zhuǎn)換器
可以使用三種方式實現(xiàn)自定義類型轉(zhuǎn)換器
-
實現(xiàn)Converter<S, T>接口
public interface Converter<S, T> { // 將S類型轉(zhuǎn)為T類型 T convert(S var1); }
實現(xiàn)Converter<S, T>接口
@Component
public class UserConverter implements Converter<String, User> {
@Override
public User convert(String s) {
// 規(guī)則為每個字段使用:分隔,如果字段為null,將null拼入串中(規(guī)則可以與前端定 這里就舉個例子)
if(s != null && !"".equals(s)){
String[] values = s.split(":");
if(values != null && values.length > 0){
User user = new User();
if("null".equals(values[0])){
user.setId(0);
} else {
user.setId(Integer.parseInt(values[0]));
}
if("null".equals(values[1])){
user.setName("");
} else {
user.setName(values[1]);
}
return user;
}
}
return null;
}
}
<!-- 配置自定義類型轉(zhuǎn)換器 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<ref bean="userConverter"/>
</list>
</property>
</bean>
<mvc:annotation-driven conversion-service="conversionService"/>
@RequestMapping("/testConverter")
public String testConverter(User user){
System.out.println(user);
return "hello";
}
由于本身的博客百度沒有收錄,博客地址https://zhhll.com.cn