SpringMVC的入门笔记(中)

当页面数据提交到服务器端,页面提交的任何数据,它都是字符串类型的,可是我们后台的javabean里面的属性,却不都是字符串类型的,这就牵扯到类型转换啦。

SpringMVC内部帮我们进行了类型转换

但是框架帮我们进行的类型转换,是有限制的。比如说 字符串类型 -> 日期类型,SpringMVC内部默认只支持2007/09/03这种类型格式。但是我们就想用别的格式呢???

这就牵扯到自定义类型转换器

类型转换器

先来看一个小栗子
1、给出实体类User.java

public class User implements Serializable{

    private String uname;
    private Integer age;
    private Date date;

	//getset方法
	//ToString方法
}

2、给出 Account.java

public class Account implements Serializable{

    private String username;
    private String password;
    private Double money;
    
    private List<User> list;
    private Map<String,User> map;

	//getset方法
	//ToString方法
}

3、给出控制器 ParamController.java

@Controller
@RequestMapping("/param")
public class ParamController {
 
    @RequestMapping("/saveUser")
    public String saveUser(User user){
        System.out.println("执行了...");
        System.out.println(user);
        return "success";
    }
    
}

4、给出 param.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <form action="param/saveUser" method="post">
        用户姓名:<input type="text" name="uname" /><br/>
        用户年龄:<input type="text" name="age" /><br/>
        用户生日:<input type="text" name="date" /><br/>
        <input type="submit" value="提交" />
    </form>

</body>
</html>

5、给出springmvc.xml 和 web.xml 以及 success.jsp

运行结果:
在这里插入图片描述
在这里插入图片描述
可以看出来运行没一点毛病

当换一种格式输入生日时:
在这里插入图片描述
在这里插入图片描述
控制台都没有打印出来,说明这个方法还没执行呢。它在进行数据封装的时候,在类型转换的时候,出问题啦!!!

上面这个案例在类型转换的时候出错了,那怎么解决呢???SpringMVC框架为我们提供了 可以自定义数据类型的转换器。

自定义类型转换器实现代码的改写

步骤:
1)定义一个类,实现 Converter 接口,该接口有两个泛型。

public interface Converter<S, T> {//S:表示接受的类型,T:表示目标类型
		/**
		* 实现类型转换的方法
		*/
		@Nullable
		T convert(S source);
}

2)注册类型转换器

具体的代码:

1)给出一个工具类 StringToDateConverter.java 用来把字符串转换日期

public class StringToDateConverter implements Converter<String,Date>{

    /**
     * String source    传入进来字符串
     * @param source
     * @return
     */
    public Date convert(String source) {
        if(source == null){
            throw new RuntimeException("请您传入数据");
        }
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

        try {
            // 把字符串转换日期
            return df.parse(source);
        } catch (Exception e) {
            throw new RuntimeException("数据类型转换出现错误");
        }
    }
}

注意:

  • 接口Converter 是org.springframework.core.convert.converter.Converter包下的,不要导错包。
  • DataFormat接口 用来 字符串转日期的

2)在springmvc.xml 中 注册类型转换器

    <!--配置自定义类型转换器-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="utils.StringToDateConverter"/>
            </set>
        </property>
    </bean>


    <!-- 开启SpringMVC框架注解的支持 -->
    <mvc:annotation-driven conversion-service="conversionService"/>

这次我们自定义的类型转换器,生效了,成功实现了 字符串 到 Date类型 的转换!

获取servlet原生的API

假如我们想在控制器的方法中,想拿到原生的servlet的API,这个该怎么做??

很简单,在控制器里面这样写:

@RequestMapping("/testServlet")
    public String testServlet(HttpServletRequest request, HttpServletResponse response){
        System.out.println("执行了...");
        System.out.println(request);

        HttpSession session = request.getSession();
        System.out.println(session);

        ServletContext servletContext = session.getServletContext();
        System.out.println(servletContext);

        System.out.println(response);
        return "success";
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值