• 自定义类型转换器 及 使用 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"; }
  • 相关阅读:
    struts2学习笔记之校验器
    struts2学习笔记之文件上传
    在ASP.net MVC里用Jquery的Ajax功能调用相关LinqtoSQL生成的类出现错误循环引用
    Linq,企业类库,EXECL生成,Execl chart的一些基本操作记录.(一)
    记录Linq所学.
    记录一个很平常的想法.
    链表反序(C#版)
    oracle 体系结构
    Oracle的sys和system用户的区别
    数据库触发器的理解
  • 原文地址:https://www.cnblogs.com/mkl7/p/10799110.html
Copyright © 2020-2023  润新知