springMVC入门-2.数据格式转换

1.springMVC的参数绑定:

把从客户端获取的参数数据绑定到controller方法的形参上.

2. Spring的数据绑定过程:

SpringMVC所有的参数封装(ServletRequest)到WebDataBinder组件中,ConversionService组件进行数据的转换和格式化,数据验证(validator) ,springMVC的类型转换来说,我们所需要的大部分的数据类型转换(基本类型的数据转换)他已经给实现了可以详见ConversionService这个接口

2.5版本之前支持 String ---Date的自动转换
3.0 + 需要 显示的进行数据类型转换器的定义
Spring类型对于Date类型的转换有两种方式
    1) 实现Converter接口实现String-date
    2)  需要在目标类的属性上添加@dateTimeFormat注解即可

3. SpringMVC的自定义数据转换类型的步骤

1)实现Converter接口

@Component
public class DateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String string) {

        Long l=Long.parseLong(string);
        if(l!=null){
            Date date=new Date(l);
            return date;
        }
        return null;
    }
}

2)需要组件扫描器进行对类型转换组件的扫描

mvc:annotation-driven

3)配置类型转换器组件,将自定义的类型转换器纳入到conversionService组件中

<!-- 组件扫描器 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
    <bean id="conversionService"
        class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <ref bean="dateConverter" />
            </set>
        </property>
</bean>
  1. SpringMVC的Converter formatter接口
    Converter是万能的(后台)把任何的源类型转换为目标类型 Formatter主要用于页面的转换(前台)而且源类型必须是String类型的
<!-- 组件扫描器 -->
<mvc:annotation-driven conversion-service="conversionService">
</mvc:annotation-driven>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> 
        <property name="converters">
            <set>
                <ref bean="dateConverter"/>
            </set>
        </property>
</bean>

5 SpringMVC的数据模块进行输出数据时,如果使用的是ModelAndView,那么model中的数据会放到request作用域中。

6 SpringMVC处理输入模型的第二种方式是在目标方法的入参处使用map类型结合接受数据,默认下会放置到request作用域中
注意存放的不是map,而是所有的键值对

7 SpringMVC同样支持redirect和forward ,需要使用关键字:的方式调用,而且必须是在返回值为String类型情况下使用。

8 SpringMVC使用View接口进行自定义视图的定义,可以使用getContextType来设定将要放回的视图的类型

<bean  class="org.springframework.web.servlet.view.BeanNameViewResolver">
       <property name="order"  value="100"></property>
</bean>
@Component
public class TestView implements View {
    @Override
    public String getContentType() {
        return "image/jpeg";
    }
    @Override
    public void render(Map<String, ?> arg0, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

            ServletContext context=request.getServletContext();
            InputStream input=context.getResourceAsStream("/img/test.jpg");
            ServletOutputStream out=response.getOutputStream();
            System.out.println(input);
            int i=0;
            while(-1!=(i=input.read())){
                out.write(i);
            }
            out.close();
            input.close();
    }
}

    @RequestMapping("/getImg")
    public String getImg(){
        return "testView";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值