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。 

推薦閱讀: