Spring MVC實現GET請求接收Date類型參數
SpringMVC GET請求接收Date類型參數
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接收哪些類型參數參數
支持的數據類型
基本類型參數:
包括基本類型和 String 類型
POJO 類型參數:
包括實體類,以及關聯的實體類
數組和集合類型參數:
包括 List 結構和 Map 結構的集合(包括數組)
SpringMVC 綁定請求參數是自動實現的,但是要想使用,必須遵循使用要求。
使用要求
如果是基本類型或者 String 類型:
要求我們的參數名稱必須和控制器中方法的形參名稱保持一致。(嚴格區分大小寫)
如果是 POJO 類型,或者它的關聯對象:
要求表單中參數名稱和 POJO 類的屬性名稱保持一致。並且控制器方法的參數類型是 POJO 類型。
如果是集合類型,有兩種方式:
- 第一種:
要求集合類型的請求參數必須在 POJO 中。在表單中請求參數名稱要和 POJO 中集合屬性名稱相同。
給 List 集合中的元素賦值,使用下標。
給 Map 集合中的元素賦值,使用鍵值對。
- 第二種:
接收的請求參數是 json 格式數據。需要借助一個註解實現。
註意:
它還可以實現一些數據類型自動轉換。內置轉換器全都在:
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 ...... 如遇特殊類型轉換要求,需要我們自己編寫自定義類型轉換器。
自定義類型轉換器
- 第一步:定義一個類,實現 Converter 接口,該接口有兩個泛型。
public interface Converter<S, T> {//S:表示接受的類型,T:表示目標類型 /** * 實現類型轉換的方法 */ @Nullable T convert(S source); } /** * 自定義類型轉換器 */ public class StringToDateConverter implements Converter<String, Date> { /** * 用於把 String 類型轉成日期類型 */ @Override public Date convert(String source) { DateFormat format = null; try { if(StringUtils.isEmpty(source)) { throw new NullPointerException("請輸入要轉換的日期"); } format = new SimpleDateFormat("yyyy-MM-dd"); Date date = format.parse(source); return date; } catch (Exception e) { throw new RuntimeException("輸入日期有誤"); } } }
- 第二步:在 spring 配置文件中配置類型轉換器。
spring 配置類型轉換器的機制是,將自定義的轉換器註冊到類型轉換服務中去。
<!-- 配置類型轉換器工廠 --> <bean id="converterService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <!-- 給工廠註入一個新的類型轉換器 --> <property name="converters"> <array> <!-- 配置自定義類型轉換器 --> <bean class="com.itheima.web.converter.StringToDateConverter"></bean> </array> </property> </bean>
- 第三步:在 annotation-driven 標簽中引用配置的類型轉換服務
<!-- 引用自定義類型轉換器 --> <mvc:annotation-driven conversion-service="converterService"></mvc:annotation-driven>
使用 ServletAPI 對象作為方法參數
@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"; }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- javaSE基礎java自定義註解原理分析
- Java Spring MVC獲取請求數據詳解操作
- Java Float 保留小數位精度的實現
- Spring Boot中如何使用Convert接口實現類型轉換器
- java Long類型轉為json後數據損失精度的處理方式