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

来源:互联网 发布:js面向对象怎么理解 编辑:程序博客网 时间:2024/05/22 16:52

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接口

@Componentpublic 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>
@Componentpublic 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";    }
原创粉丝点击