javascript
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
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
復雜POJO類型參數
-
當POJO中出現對象屬性時,參數名稱與對象層次結構名稱保持一致
訪問URL: http://localhost/requestParam5?address.province=beijing
當POJO中出現集合,保存簡單數據,使用多個相同名稱的參數為其進行賦值
訪問URL:http://localhost:8080/requestParam6?nick=aa&nick=bb&nick=cc
當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接口實現,它幫我們做了類型轉換
標量轉換器
| StringToBooleanConverter | String→Boolean |
| ObjectToStringConverter | Object→String |
| StringToNumberConverterFactory | String→Number( Integer、 Long等) |
| NumberToNumberConverterFactory | Number子類型之間(Integer、 Long、 Double等) |
| StringToCharacterConverter | String→java.lang.Character |
| NumberToCharacterConverter | Number子類型(Integer、 Long、 Double等)→java.lang.Character |
| CharacterToNumberFactory | java.lang.Character→Number子類型(Integer、 Long、 Double等) |
| StringToEnumConverterFactory | String→enum類型 |
| EnumToStringConverter | enum類型→String |
| StringToLocaleConverter | String→java.util.Local |
| PropertiesToStringConverter | java.util.Properties→String |
| StringToPropertiesConverter | String→java.util.Properties |
集合、數組相關轉換器
| ArrayToCollectionConverter | 數組→集合( List、 Set) |
| CollectionToArrayConverter | 集合( List、 Set) →數組 |
| ArrayToArrayConverter | 數組間 |
| CollectionToCollectionConverter | 集合間( List、 Set) |
| MapToMapConverter | Map間 |
| ArrayToStringConverter | 數組→String類型 |
| StringToArrayConverter | String→數組, trim后使用“,”split |
| ArrayToObjectConverter | 數組→Object |
| ObjectToArrayConverter | Object→單元素數組 |
| CollectionToStringConverter | 集合( List、 Set) →String |
| StringToCollectionConverter | String→集合( List、 Set), trim后使用“,”split |
| CollectionToObjectConverter | 集合→Object |
| ObjectToCollectionConverter | Object→單元素集合 |
默認轉換器
| ObjectToObjectConverter | Object間 |
| IdToEntityConverter | Id→Entity |
| FallbackObjectToStringConverter | Object→String |
- SpringMVC對接收的數據進行自動類型轉換,該工作通過Converter接口實現
Date類型轉換問題,轉換器只能識別/類型的分隔符,如果換成2022-01-17的話就識別不了,可以通過設置轉換器date類型解決
訪問URL: http://localhost/requestParam11?2022/01/17
但是
日期類型格式轉換
聲明自定義的轉換格式并覆蓋系統轉換格式
<!--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接口,并制定轉換前與轉換后的類型
通過注冊自定義轉換器,將該功能加入到SpringMVC的轉換服務ConverterService中
<!--開啟注解驅動,加載自定義格式化轉換器對應的類型轉換服務--> <mvc:annotation-driven conversion-service="conversionService"/>請求映射 @RequestMapping
- 當設置了公共的訪問前綴后,當前路徑發生了變化,需要根據變化修改地址或修改訪問頁面的路徑
- 如果不在類上配置@RequestMapping,訪問的是root路勁下的頁面
- 如果在類上配置了@RequestMapping,訪問的是root路徑下的user路徑下的頁面
方法注解
- 名稱: @RequestMapping
- 類型: 方法注解
- 位置:處理器類中的方法定義上方
- 作用:綁定請求地址與對應處理方法間的關系
- 訪問URL:http://localhost:8080/requestParam13
類注解
名稱: @RequestMapping
- 類型: 類注解
- 位置:處理器類定義上方
- 作用:為當前處理器中所有方法設定公共的訪問路徑前綴
- 訪問URL:http://localhost:8080/user/requestParam14
- 如果返回的有圖片,那么圖片也要放在user包下
常用屬性
@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、数组集合类型传参与类转换器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql clickhouse_通过m
- 下一篇: java带权连通图上最小权边,连通图最小