首頁 > 軟體

Spring MVC實現GET請求接收Date型別引數

2022-07-05 10:00:15

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";
    }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。 


IT145.com E-mail:sddin#qq.com