zoukankan      html  css  js  c++  java
  • 自定义类型转换器 及 使用 ServletAPI 对象作为方法参数

    自定义类型转换器使用场景: 

    jsp 代码: 

      <!-- 特殊情况之:类型转换问题 -->

      <a href="account/deleteAccount?date=2018-01-01">根据日期删除账户</a> 

    控制器代码: 

      @RequestMapping("/deleteAccount")

      public String deleteAccount(String  date) { 

        System.out.println("删除了账户。。。。"+date); 

        return "success";

      }

    当我们把控制器中方法参数的类型改为 Date时: 会报异常

      @RequestMapping("/deleteAccount") 

      public String deleteAccount(Date  date) {   

        System.out.println("删除了账户。。。。"+date);   

        return "success"; 

      } 

    自定义类型转换器 使用步骤 

    第一步:定义一个类,实现 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.mkl.web.converter.StringToDateConverter"></bean> 
            </array>      
      </property> 
    </bean> 

    第三步:在 annotation-driven标签中引用配置的类型转换服务 

    <!-- 引用自定义类型转换器 -->
    <mvc:annotation-driven  conversion-service="converterService"></mvc:annotation-driven>

    使用 ServletAPI 对象作为方法参数 

    SpringMVC 还支持使用原始 ServletAPI 对象作为控制器方法的参数。支持原始 ServletAPI 对象有: 

      HttpServletRequest 

      HttpServletResponse

      HttpSession

      java.security.Principal

      Locale

      InputStream 

      OutputStream 

      Reader 

      Writer 

    我们可以把上述对象,直接写在控制器的方法参数中使用。 

    示例:

    jsp 代码:

    <!-- 原始 ServletAPI 作为控制器参数 -->

    <a href="account/testServletAPI">测试访问 ServletAPI</a> 

    控制器中的代码:

    @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"; }
  • 相关阅读:
    Pascal 语言中的关键字及保留字
    单元文件结构
    在 case 语句中使用字符串-转
    程序流程的辅助控制-转
    XE版本 InputQuery 可以同时填多个输入值
    转:Delphi 6 实用函数
    转:Delphi 函数大全
    d 属性: 赋予字段执行动作的能力
    Json格式示意图
    转:虚拟方法跳过父类继承调用祖父类的代码 --值得试一试
  • 原文地址:https://www.cnblogs.com/mkl7/p/10799110.html
Copyright © 2011-2022 走看看