Spring?MVC實現(xiàn)GET請求接收Date類型參數(shù)
SpringMVC GET請求接收Date類型參數(shù)
Controller方法定義
@GetMapping('/list-by-date') ResponseBean listByUserIdAndDateRange(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date fromDate)? ? ? System.out.println(fromDate) }
請求
curl -X GET http://localhost/list-by-date?fromDate=2019-02-27 00:01:00
SpringMVC接收哪些類型參數(shù)參數(shù)
支持的數(shù)據(jù)類型
基本類型參數(shù):
包括基本類型和 String 類型
POJO 類型參數(shù):
包括實體類,以及關(guān)聯(lián)的實體類
數(shù)組和集合類型參數(shù):
包括 List 結(jié)構(gòu)和 Map 結(jié)構(gòu)的集合(包括數(shù)組)
SpringMVC 綁定請求參數(shù)是自動實現(xiàn)的,但是要想使用,必須遵循使用要求。
使用要求
如果是基本類型或者 String 類型:
要求我們的參數(shù)名稱必須和控制器中方法的形參名稱保持一致。(嚴(yán)格區(qū)分大小寫)
如果是 POJO 類型,或者它的關(guān)聯(lián)對象:
要求表單中參數(shù)名稱和 POJO 類的屬性名稱保持一致。并且控制器方法的參數(shù)類型是 POJO 類型。
如果是集合類型,有兩種方式:
- 第一種:
要求集合類型的請求參數(shù)必須在 POJO 中。在表單中請求參數(shù)名稱要和 POJO 中集合屬性名稱相同。
給 List 集合中的元素賦值,使用下標(biāo)。
給 Map 集合中的元素賦值,使用鍵值對。
- 第二種:
接收的請求參數(shù)是 json 格式數(shù)據(jù)。需要借助一個注解實現(xiàn)。
注意:
它還可以實現(xiàn)一些數(shù)據(jù)類型自動轉(zhuǎn)換。內(nèi)置轉(zhuǎn)換器全都在:
org.springframework.core.convert.support 包下。有: java.lang.Boolean -> java.lang.String : ObjectToStringConverter java.lang.Character -> java.lang.Number : CharacterToNumberFactory java.lang.Character -> java.lang.String : ObjectToStringConverter java.lang.Enum -> java.lang.String : EnumToStringConverter java.lang.Number -> java.lang.Character : NumberToCharacterConverter java.lang.Number -> java.lang.Number : NumberToNumberConverterFactory java.lang.Number -> java.lang.String : ObjectToStringConverter java.lang.String -> java.lang.Boolean : StringToBooleanConverter java.lang.String -> java.lang.Character : StringToCharacterConverter java.lang.String -> java.lang.Enum : StringToEnumConverterFactory java.lang.String -> java.lang.Number : StringToNumberConverterFactory java.lang.String -> java.util.Locale : StringToLocaleConverter java.lang.String -> java.util.Properties : StringToPropertiesConverter java.lang.String -> java.util.UUID : StringToUUIDConverter java.util.Locale -> java.lang.String : ObjectToStringConverter java.util.Properties -> java.lang.String : PropertiesToStringConverter java.util.UUID -> java.lang.String : ObjectToStringConverter ...... 如遇特殊類型轉(zhuǎn)換要求,需要我們自己編寫自定義類型轉(zhuǎn)換器。
自定義類型轉(zhuǎn)換器
- 第一步:定義一個類,實現(xiàn) Converter 接口,該接口有兩個泛型。
public interface Converter<S, T> {//S:表示接受的類型,T:表示目標(biāo)類型 ? ? /** ? ? ?* 實現(xiàn)類型轉(zhuǎn)換的方法 ? ? ?*/ ? ? @Nullable ? ? T convert(S source); } /** ?* 自定義類型轉(zhuǎn)換器 ?*/ public class StringToDateConverter implements Converter<String, Date> { ? ? /** ? ? ?* 用于把 String 類型轉(zhuǎn)成日期類型 ? ? ?*/ ? ? @Override ? ? public Date convert(String source) { ? ? ? ? DateFormat format = null; ? ? ? ? try { ? ? ? ? ? ? if(StringUtils.isEmpty(source)) { ? ? ? ? ? ? ? ? throw new NullPointerException("請輸入要轉(zhuǎn)換的日期"); ? ? ? ? ? ? } ? ? ? ? ? ? format = new SimpleDateFormat("yyyy-MM-dd"); ? ? ? ? ? ? Date date = format.parse(source); ? ? ? ? ? ? return date; ? ? ? ? } catch (Exception e) { ? ? ? ? ? ? throw new RuntimeException("輸入日期有誤"); ? ? ? ? } ? ? } }
- 第二步:在 spring 配置文件中配置類型轉(zhuǎn)換器。
spring 配置類型轉(zhuǎn)換器的機制是,將自定義的轉(zhuǎn)換器注冊到類型轉(zhuǎn)換服務(wù)中去。
<!-- 配置類型轉(zhuǎn)換器工廠 --> <bean id="converterService" ?class="org.springframework.context.support.ConversionServiceFactoryBean"> <!-- 給工廠注入一個新的類型轉(zhuǎn)換器 --> ?? ?<property name="converters"> ?? ? <array> ?? ? <!-- 配置自定義類型轉(zhuǎn)換器 --> ?? ??? ? <bean class="com.itheima.web.converter.StringToDateConverter"></bean> ?? ? </array> ?? ? </property> </bean>
- 第三步:在 annotation-driven 標(biāo)簽中引用配置的類型轉(zhuǎn)換服務(wù)
<!-- 引用自定義類型轉(zhuǎn)換器 --> <mvc:annotation-driven ?conversion-service="converterService"></mvc:annotation-driven>
使用 ServletAPI 對象作為方法參數(shù)
?? ?@RequestMapping("/testServletAPI") ? ? public String testServletAPI(HttpServletRequest request, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?HttpServletResponse response, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?HttpSession session) { ? ? ? ? System.out.println(request); ? ? ? ? System.out.println(response); ? ? ? ? System.out.println(session); ? ? ? ? return "success"; ? ? }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java基礎(chǔ)之?dāng)?shù)組模擬循環(huán)隊列
這篇文章主要介紹了Java基礎(chǔ)之?dāng)?shù)組模擬循環(huán)隊列,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們也有非常好的幫助,需要的朋友可以參考下2021-04-04詳解Java并發(fā)包中線程池ThreadPoolExecutor
ThreadPoolExecutor是Java語言對于線程池的實現(xiàn)。線程池技術(shù)使線程在使用完畢后不回收而是重復(fù)利用。如果線程能夠復(fù)用,那么我們就可以使用固定數(shù)量的線程來解決并發(fā)問題,這樣一來不僅節(jié)約了系統(tǒng)資源,而且也會減少線程上下文切換的開銷2021-06-06Springboot關(guān)于自定義stater的yml無法提示問題解決方案
這篇文章主要介紹了Springboot關(guān)于自定義stater的yml無法提示問題及解決方案,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06