最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解SpringMVC的類型轉(zhuǎn)換及驗證方法

 更新時間:2018年10月09日 11:26:50   投稿:laozhang  
在本篇文章里面我們給大家詳細(xì)分析了SpringMVC的類型轉(zhuǎn)換及驗證方法的相關(guān)知識,對此有需要的朋友們學(xué)習(xí)下吧。

Spring mvc 數(shù)據(jù)綁定流程

SpringMvc將ServletRequest對象及目標(biāo)方法的形參實例傳給WebDataBinderFactory實例,以創(chuàng)建DataBinder實例對象。DataBinder調(diào)用裝配在SpringMvc上下文中的ConversionService組件進(jìn)行類型轉(zhuǎn)換和數(shù)據(jù)格式化工作,將Servlet請求信息填充到形參對象中。調(diào)用Validator主鍵對已經(jīng)綁定了請求信息的形參對象精選數(shù)據(jù)有效性驗證,并最終生成數(shù)據(jù)綁定結(jié)果BindingData對象。SpringMVC抽取BindingResult中的形參對象和校驗錯誤對象,將他們賦給處理方法的相應(yīng)參數(shù)

我們查看源代碼可以看到,通過WebDataBinderFactory創(chuàng)建DataBinder對象

自定義類型轉(zhuǎn)換器

當(dāng)我們碰到一些特殊場合,有可能需要我們自己定義類型轉(zhuǎn)換器。下麥呢來講解一個自定義類型轉(zhuǎn)器,將字符串轉(zhuǎn)換成emp對象,當(dāng)頁面無法完成數(shù)據(jù)綁定或者類型轉(zhuǎn)換時,springmvc會拋出異常,異常信息可以使用BindingResult來進(jìn)行獲取。

Spring定義了三種類型的轉(zhuǎn)換器接口,實現(xiàn)任意一個轉(zhuǎn)換器接口都可以作為自定義轉(zhuǎn)換器注冊到ConversionServiceFactoryBean中。

Convertre<S,T>:將S類型轉(zhuǎn)換為T類型。

ConverterFactory:將相同系類的多個“同質(zhì)”Converter封裝在一起,如果希望一種類型轉(zhuǎn)換成另一種類型以及子類對象(例如String轉(zhuǎn)換成Number以Number的子類),可以使用該轉(zhuǎn)換器

GenericConverter:會根據(jù)源類對象以及目標(biāo)類對象所在的宿主類中的上下文信息精選類型轉(zhuǎn)換。

package com.spring.mvc.controller;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
@Component
public class UserConverter implements Converter<String, User>{
 @Override
 public User convert(String source) {
  System.out.println(source);
  String users [] = source.split("-");
  User user = new User();
  user.setUno(Integer.valueOf(users[0]));
  user.setUsername(users[1]);
  user.setUserpass(users[2]);
  return user;
 }
}

ConversionService時SpringMVC中類型轉(zhuǎn)換器的核心接口,要添加自定義類型轉(zhuǎn)換器,需要實現(xiàn)該接口/利用

ConversionServiceFactoryBean在Spring的IOC容器中第一一個ConversionService,并在Bean屬性配置對于的類型轉(zhuǎn)換器的實現(xiàn)類,SpringMvc處理方法的形參綁定時就會自動調(diào)用該類型轉(zhuǎn)換器。

<!--將非mapping配置下的請求交給默認(rèn)的Servlet來處理 -->
 <mvc:default-servlet-handler />
 <bean id="conversionService"
  class="org.springframework.context.support.ConversionServiceFactoryBean">
  <property name="converters">
   <set>
    <ref bean="userConverter" />
   </set>
  </property>
 </bean>
 <!-- 注冊類型轉(zhuǎn)換器 -->
 <mvc:annotation-driven conversion-service="conversionService" />

在實際的開發(fā)同需要配置:<mvc:annotation-driven />標(biāo)簽

數(shù)據(jù)格式化

對屬性的輸入/輸出格式化,其本質(zhì)來講依然屬于類型轉(zhuǎn)換的范疇。Spring在格式化模塊中定義一個實現(xiàn)ConversionService接口的FarmattingConversionService實現(xiàn)類,該實現(xiàn)類擴(kuò)展了GenericConversionService,因此它既具有類型轉(zhuǎn)換的功能有具有格式化的功能。FormattingConversionService擁有一個FormattingConversionServiceFactoryBean工廠類,后者用于構(gòu)造前者。我們要注冊這個

<mvc:annotation-driven conversion-service="FormattingConversionServiceFactoryBean" />

JSR303

jsr303時java為bean數(shù)據(jù)合法性校驗提供的標(biāo)準(zhǔn)框架,它已經(jīng)包含在JavaEE6.0中,JSR303通過在Bean屬性上標(biāo)注類似@NotNull,@Max等標(biāo)準(zhǔn)的數(shù)據(jù)指定驗證規(guī)則,并通過標(biāo)注的驗證接口對Bean進(jìn)行驗證。

@NotEmpty
 @NotNull
 private String name;
  
 @NotNull
 @NotEmpty
 private String age;
  
 @NotNull
 @NotEmpty
 @Email
 private String email;

我們在前臺使用SpringMVC提供的Form標(biāo)簽使用Form:errors path 綁定屬性即可

@RequestMapping(value="/student",method=RequestMethod.POST)
 public String add(@Valid()Student student,BindingResult result){
  if (!result.hasErrors()) {//判斷是否有格式轉(zhuǎn)換錯誤或者其他校驗沒通過
   userService.addStudent(student);
   return "redirect:list";
  }else
   return "addPage";
 }

SpringMvc提示消息國際化

<!-- 注冊國際化信息,必須有id,指定資源文件名稱,資源文件在src目錄下 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
 <property name="basename" value="message"></property>
 </bean>

相關(guān)文章

  • 輕松掌握J(rèn)ava觀察者模式

    輕松掌握J(rèn)ava觀察者模式

    這篇文章主要幫助大家輕松掌握J(rèn)ava觀察者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • spring boot配置ssl(多cer格式)超詳細(xì)教程

    spring boot配置ssl(多cer格式)超詳細(xì)教程

    這篇文章主要介紹了spring boot配置ssl(多cer格式)超詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • java中ThreadLocal取不到值的兩種原因

    java中ThreadLocal取不到值的兩種原因

    這篇文章主要介紹了java中ThreadLocal取不到值的兩種原因,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java中的泛型詳細(xì)解析

    Java中的泛型詳細(xì)解析

    這篇文章主要介紹了Java中的泛型詳細(xì)解析,泛型又稱參數(shù)化類型,是JDK5.0出現(xiàn)的新特性,解決了數(shù)據(jù)類型的安全型問題,Java泛型可以保證如果程序在編譯時沒用發(fā)出警告,運(yùn)行時就不會產(chǎn)生classCastException異常,需要的朋友可以參考下
    2024-01-01
  • Sentinel結(jié)合Nacos實現(xiàn)數(shù)據(jù)持久化過程詳解

    Sentinel結(jié)合Nacos實現(xiàn)數(shù)據(jù)持久化過程詳解

    這篇文章主要介紹了Sentinel結(jié)合Nacos實現(xiàn)數(shù)據(jù)持久化過程,要持久化的原因是因為每次啟動Sentinel都會使之前配置的規(guī)則就清空了,這樣每次都要再去設(shè)定規(guī)則顯得非常的麻煩,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • SpringBoot集成yitter-idgenerator(雪花漂移)分布式Id自增的實現(xiàn)

    SpringBoot集成yitter-idgenerator(雪花漂移)分布式Id自增的實現(xiàn)

    本文主要介紹了SpringBoot集成yitter-idgenerator(雪花漂移)分布式Id自增的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • spring boot 學(xué)習(xí)筆記(入門篇)

    spring boot 學(xué)習(xí)筆記(入門篇)

    ing Boot是由Pivotal團(tuán)隊提供的全新框架,其設(shè)計目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。這篇文章給大家?guī)砹藄pring boot 入門學(xué)習(xí)筆記,需要的朋友參考下
    2018-02-02
  • JAVA新手學(xué)習(xí)篇之類和對象詳解

    JAVA新手學(xué)習(xí)篇之類和對象詳解

    這篇文章主要給大家介紹了關(guān)于JAVA新手學(xué)習(xí)篇之類和對象的相關(guān)資料,Java是面向?qū)ο蟮木幊陶Z言,主旨在于通過對象封裝屬性和方法實現(xiàn)功能,面向?qū)ο笈c面向過程的區(qū)別在于關(guān)注點的不同,需要的朋友可以參考下
    2024-10-10
  • Java語言實現(xiàn)簡單FTP軟件 FTP軟件效果圖預(yù)覽之上傳功能(3)

    Java語言實現(xiàn)簡單FTP軟件 FTP軟件效果圖預(yù)覽之上傳功能(3)

    這篇文章主要為大家詳細(xì)介紹了Java語言實現(xiàn)簡單FTP軟件,F(xiàn)TP軟件效果圖預(yù)覽之上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • mybatis中字段名與關(guān)鍵字相同問題

    mybatis中字段名與關(guān)鍵字相同問題

    這篇文章主要介紹了mybatis中字段名與關(guān)鍵字相同問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論

浠水县| 田林县| 五河县| 开阳县| 延长县| 杭锦旗| 阿巴嘎旗| 盐源县| 个旧市| 天台县| 若羌县| 乐清市| 建水县| 甘谷县| 大丰市| 云浮市| 清流县| 营口市| 隆尧县| 论坛| 朝阳区| 永吉县| 罗城| 清徐县| 天水市| 清水县| 丰城市| 南木林县| 梨树县| 洱源县| 江阴市| 永吉县| 定陶县| 黄山市| 三穗县| 黄山市| 若尔盖县| 葫芦岛市| 新郑市| 璧山县| 五大连池市|