日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC请求中的普通、POJO、数组集合类型传参与类转换器

發布時間:2025/3/15 javascript 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC请求中的普通、POJO、数组集合类型传参与类转换器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SpringMVC將傳遞的參數封裝到處理器方法的形參中,達到快速訪問參數的目的。

普通類型參數傳參

參數名與處理器方法形參名保持一致

訪問URL: http://localhost/requestParam1?name=itzhuzhu&age=14

@RequestMapping("/requestParam1")public String requestParam1(String name,Integer age){System.out.println(name+","+age);return "page.jsp";}

@RequestParam 的使用

  • 類型: 形參注解

  • 位置:處理器類中的方法形參前方

  • 作用:綁定請求參數與對應處理方法形參間的關系,瀏覽器傳username可以回傳給name

    訪問URL: http://localhost/requestParam2?userName=itzhuzhu

@RequestMapping("/requestParam2") public String requestParam2(@RequestParam(name = "userName",required = true,// 為true必須傳參,否則報錯defaultValue = "itzhuzhu") String name){System.out.println("name="+name);return "page.jsp"; }

POJO類型參數傳參

當POJO中使用簡單類型屬性時, 參數名稱與POJO類屬性名保持一致

訪問URL: http://localhost/requestParam3?name=itzhuzhu&age=14

實體類

public class User {private String name;private Integer age; }

Controller

@RequestMapping("/requestParam3") public String requestParam3(User user){System.out.println(user);return "page.jsp"; }

參數沖突問題

  • 當POJO類型屬性與其他形參出現同名問題時,將被同時賦值
  • 建議使用@RequestParam注解進行區分
    訪問URL: http://localhost/requestParam4?name=itzhuzhu&age=14
@RequestMapping("/requestParam4") public String requestParam4(User user,String age){System.out.println("user.age="+user.getAge()+",age="+age);return "page.jsp"; }

復雜POJO類型參數

  • 當POJO中出現對象屬性時,參數名稱與對象層次結構名稱保持一致

    訪問URL: http://localhost/requestParam5?address.province=beijing

public class User {private String name;private Integer age;private Address addresses; }public class Address {private String province;private String city;private String address; } @RequestMapping("/requestParam5") public String requestParam5(User user){System.out.println("user.address="+user.getAddress().getProvince());return "page.jsp"; }

當POJO中出現集合,保存簡單數據,使用多個相同名稱的參數為其進行賦值
訪問URL:http://localhost:8080/requestParam6?nick=aa&nick=bb&nick=cc

@RequestMapping("/requestParam6")public String requestParam6(User user){System.out.println(user);return "page.jsp";}

當POJO中出現List,保存對象數據,參數名稱與對象層次結構名稱保持一致,使用數組格式描述集合中對象的位置

訪問URL: http://localhost/requestParam7?addresses[0].city=gz&addresses[1].province=gd

public class User {private String name;private Integer age;private List<Address> addresses; }public class Address {private String province;private String city;private String address; } @RequestMapping("/requestParam7") public String requestParam7(User user){System.out.println("user.addresses="+user.getAddress());return "page.jsp"; }

當POJO中出現Map,保存對象數據,參數名稱與對象層次結構名稱保持一致,使用映射格式描述集合中對象的位置

訪問URL: http://localhost/requestParam8?addressMap[’home’].province=bj&addressMap[’job’].province=tj

public class User {private String name;private Integer age;private Map<String,Address> addressMap; } public class Address {private String province;private String city;private String address; } @RequestMapping("/requestParam8") public String requestParam8(User user){System.out.println("user.addressMap="+user.getAddressMap());return "page.jsp"; }

數組與集合類型參數傳參

數組類型參數

請求參數名與處理器方法形參名保持一致,且請求參數數量> 1個

訪問URL: http://localhost/requestParam9?nick=Jockme&nick=abcd

@RequestMapping("/requestParam9") public String requestParam9(String[] nick){System.out.println(nick[0]+","+nick[1]);return "page.jsp"; }

集合類型參數

保存簡單類型數據,請求參數名與處理器方法形參名保持一致,且請求參數數量> 1個

訪問URL: http://localhost/requestParam10?nick=Jockme&nick=abcd

@RequestMapping("/requestParam10") public String requestParam10(@RequestParam("nick") List<String> nick){System.out.println(nick);return "page.jsp"; }

注意: SpringMVC默認將List作為對象處理,賦值前先創建對象,然后將nick作為對象的屬性進行處理。由于List是接口,無法創建對象,報無法找到構造方法異常;修復類型為可創建對象的ArrayList類型后,對象可以創建,但沒有nick屬性,因此數據為空。此時需要告知SpringMVC的處理器nick是一組數據,而不是一個單一數據。通過@RequestParam注解,將數量大于1個names參數打包成參數數組后, SpringMVC才能識別該數據格式,并判定形參類型是否為數組或集合,并按數組或集合對象的形式操作數據。

類型轉換器

SpringMVC對接收的數據進行自動類型轉換,該工作通過Converter接口實現,它幫我們做了類型轉換

標量轉換器

方法解釋
StringToBooleanConverterString→Boolean
ObjectToStringConverterObject→String
StringToNumberConverterFactoryString→Number( Integer、 Long等)
NumberToNumberConverterFactoryNumber子類型之間(Integer、 Long、 Double等)
StringToCharacterConverterString→java.lang.Character
NumberToCharacterConverterNumber子類型(Integer、 Long、 Double等)→java.lang.Character
CharacterToNumberFactoryjava.lang.Character→Number子類型(Integer、 Long、 Double等)
StringToEnumConverterFactoryString→enum類型
EnumToStringConverterenum類型→String
StringToLocaleConverterString→java.util.Local
PropertiesToStringConverterjava.util.Properties→String
StringToPropertiesConverterString→java.util.Properties

集合、數組相關轉換器

方法解釋
ArrayToCollectionConverter數組→集合( List、 Set)
CollectionToArrayConverter集合( List、 Set) →數組
ArrayToArrayConverter數組間
CollectionToCollectionConverter集合間( List、 Set)
MapToMapConverterMap間
ArrayToStringConverter數組→String類型
StringToArrayConverterString→數組, trim后使用“,”split
ArrayToObjectConverter數組→Object
ObjectToArrayConverterObject→單元素數組
CollectionToStringConverter集合( List、 Set) →String
StringToCollectionConverterString→集合( List、 Set), trim后使用“,”split
CollectionToObjectConverter集合→Object
ObjectToCollectionConverterObject→單元素集合

默認轉換器

方法解釋
ObjectToObjectConverterObject間
IdToEntityConverterId→Entity
FallbackObjectToStringConverterObject→String
  • SpringMVC對接收的數據進行自動類型轉換,該工作通過Converter接口實現

Date類型轉換問題,轉換器只能識別/類型的分隔符,如果換成2022-01-17的話就識別不了,可以通過設置轉換器date類型解決
訪問URL: http://localhost/requestParam11?2022/01/17
但是

@RequestMapping("/requestParam11") public String requestParam11(Date date){System.out.println(date);return "page.jsp"; }

日期類型格式轉換

聲明自定義的轉換格式并覆蓋系統轉換格式

<!--6.啟用自定義Converter--> <mvc:annotation-driven conversion-service="conversionService"/> <!--1.設定格式類型Converter,注冊為Bean,受SpringMVC管理--> <bean id="conversionService"class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><!--2.自定義Converter格式類型設定,該設定使用的是同類型覆蓋的思想--><property name="formatters"><!--3.使用set保障相同類型的轉換器僅保留一個,避免沖突--><set><!--4.設置具體的格式類型--><bean class="org.springframework.format.datetime.DateFormatter"><!--5.類型規則--><property name="pattern" value="yyyy-MM-dd"/></bean></set></property> </bean>

日期類型格式轉換(注解簡化版)

  • 名稱: @DateTimeFormat
  • 類型: 形參注解、成員變量注解
  • 位置:形參前面 或 成員變量上方
  • 作用:為當前參數或變量指定類型轉換規則

加在屬性上:

public String requestParam12(@DateTimeFormat(pattern = "yyyy-MM-dd") Date date){System.out.println("date="+date);return "page.jsp"; }

加在POJO上:

@DateTimeFormat(pattern = "yyyy-MM-dd") private Date birthday;

注意:需要在SpringMVC配置文件中加上注解驅動標簽 <mvc:annotation-driven/>

自定義類型轉換器

  • 自定義類型轉換器,實現Converter接口,并制定轉換前與轉換后的類型
<!--1.將自定義Converter注冊為Bean,受SpringMVC管理--> <bean id="myDateConverter" class="com.itzhuzhu.converter.MyDateConverter"/> <!--2.設定自定義Converter服務bean--> <bean id="conversionService"class="org.springframework.context.support.ConversionServiceFactoryBean"><!--3.注入所有的自定義Converter,該設定使用的是同類型覆蓋的思想--><property name="converters"><!--4.set保障同類型轉換器僅保留一個,去重規則以Converter<S,T>的泛型為準--><set><!--5.具體的類型轉換器--><ref bean="myDateConverter"/></set></property> </bean> //自定義類型轉換器,實現Converter接口,接口中指定的泛型即為最終作用的條件 //本例中的泛型填寫的是String,Date,最終出現字符串轉日期時,該類型轉換器生效 public class MyDateConverter implements Converter<String, Date> {//重寫接口的抽象方法,參數由泛型決定public Date convert(String source) {DateFormat df = new SimpleDateFormat("yyyy-MM-dd");Date date = null;//類型轉換器無法預計使用過程中出現的異常,因此必須在類型轉換器內部捕獲,不允許拋出,框架無法預計此類異常如何處理try {date = df.parse(source);} catch (ParseException e) {e.printStackTrace();}return date;} }

通過注冊自定義轉換器,將該功能加入到SpringMVC的轉換服務ConverterService中

<!--開啟注解驅動,加載自定義格式化轉換器對應的類型轉換服務--> <mvc:annotation-driven conversion-service="conversionService"/>

請求映射 @RequestMapping

  • 當設置了公共的訪問前綴后,當前路徑發生了變化,需要根據變化修改地址或修改訪問頁面的路徑
  • 如果不在類上配置@RequestMapping,訪問的是root路勁下的頁面
  • 如果在類上配置了@RequestMapping,訪問的是root路徑下的user路徑下的頁面

方法注解

  • 名稱: @RequestMapping
  • 類型: 方法注解
  • 位置:處理器類中的方法定義上方
  • 作用:綁定請求地址與對應處理方法間的關系
  • 訪問URL:http://localhost:8080/requestParam13
@Controller @RequestMapping("/user") public class UserController {@RequestMapping("/requestParam13")public String requestParam13() {return "page.jsp";} }

類注解

名稱: @RequestMapping

  • 類型: 類注解
  • 位置:處理器類定義上方
  • 作用:為當前處理器中所有方法設定公共的訪問路徑前綴
  • 訪問URL:http://localhost:8080/user/requestParam14
  • 如果返回的有圖片,那么圖片也要放在user包下
@Controller @RequestMapping("/user") public class UserController {@RequestMapping("/requestParam14")public String requestParam14() {return "page.jsp";// return "/page.jsp"; 如果類上配置了RequestMapping,在返回文件前加個/也是可以訪問到的} }

常用屬性

@RequestMapping(value="/requestParam15", //設定請求路徑,與path屬性、 value屬性相同method = RequestMethod.GET, //設定請求方式params = "name", //設定請求參數條件headers = "content-type=text/*", //設定請求消息頭條件consumes = "text/*", //用于指定可以接收的請求正文類型(MIME類型)produces = "text/*" //用于指定可以生成的響應正文類型(MIME類型) ) public String requestParam15() {return "/page.jsp"; }

總結

以上是生活随笔為你收集整理的SpringMVC请求中的普通、POJO、数组集合类型传参与类转换器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。