數(shù)據(jù)綁定

原文鏈接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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容