Springmvc参数绑定

第1章 Springmvc参数绑定

1.1 概述

1.1.1 注解介绍:

@RequestParam(value="id",defaultValue="1",required = true)用于映射路径的参数

Value:代表参数名

defaultValue:用于设置参数的默认值,如果参数值为空,就会传入这个默认值

required:表示规定这个参数必须有这个参数

1.1.2 HandlerController中的方法)参数列表中默认能接收的参数类型

HttpServletRequest HttpServletResponse HttpSessionModel/ModelMap

 

1.2 绑定简单的数据类型参数

支持的数据类型:

参数类型推荐使用包装数据类型,因为基础数据类型不可以为null

整形:Integerint

字符串:String

单精度:Floatfloat

双精度:Doubledouble

布尔型:Booleanboolean

说明:对于布尔类型的参数,请求的参数值为truefalse

处理器方法:

public String editItem(Model model,Integer id,Boolean status) throws Exception

请求url

http://localhost:8080/xxx.action?id=2&status=false

 

@RequestMapping("/itemEdit")

public String editItem(@RequestParam(value="id",defaultValue="1",required = true)Integer ids, Model model) {

Items items = itemService.getItemById(ids);

//把数据传递给页面

model.addAttribute("item", items);

//返回逻辑视图

return "editItem";

} 

也可以直接在参数列表中直接写,只要参数的名字和请求中传递的参数名一致就能接收

 

1.3 绑定pojo数据类型的参数

代码:

@RequestMapping("/updateitem")

public String updateItem(Items items) {

itemService.updateItem(items);

//返回成功页面

return "success";

}

注意:提交的表单中不要有日期类型的数据,否则会报400错误。如果想提交日期类型的数据需要用到后面的自定义参数绑定的内容

1.4 (自定义参数绑定)解决提交表单时日期转换类型

分析:

因为日期传递过来的是String类型,所以会出现类型转换错误

需要编写一个工具类,将字符串转换Date方法

package cn.peihua.springmvc.utils;

 

import org.springframework.core.convert.converter.Converter;

 

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

 

public class DateConverter implements Converter<String,Date> {

 

    @Override

    public Date convert(String source) {

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        try {

            return simpleDateFormat.parse(source);

        } catch (ParseException e) {

            e.printStackTrace();

        }

        return null;

    }

}

然后在springmvc.xml中进行配置

配置日期转换器的bean

<!--配置日期转换器-->

 <bean id = "formattingConversionService" class = "org.springframework.format.support.FormattingConversionServiceFactoryBean">

     <property name="converters">

         <set>

             <bean class = "cn.peihua.springmvc.utils.DateConverter"></bean>

         </set>

     </property>

 </bean>

然后在注解驱动注册中加入

 

<!-- 配置注解驱动,如果配置此标签相当于配置了处理器映射器和适配器 -->

<mvc:annotation-driven conversion-service="formattingConversionService"/>

1.5 解决post乱码问题

web.xml中加入

<filter>

<filter-name>CharacterEncodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>utf-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CharacterEncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

以上可以解决post请求乱码问题。

对于get请求中文参数出现乱码解决方法有两个:

修改tomcat配置文件添加编码与工程编码一致,如下:

<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

 

另外一种方法对参数进行重新编码:

String userName new

String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

 

ISO8859-1tomcat默认编码,需要将tomcat编码后的内容按utf-8编码

 

 

1.6 绑定pojo包装类

定义一个包装的pojo类

package cn.peihua.springmvc.pojo;

 

public class QueryVo {

 

private Items items;

 

public Items getItems() {

return items;

}

 

public void setItems(Items items) {

this.items = items;

}

 

}

 

编写controlle层handler,直接将QueryVo 写在参数列表上即可

@RequestMapping("/queryitem")

public String queryItem(QueryVo queryVo) {

//打印绑定结果

System.out.println(queryVo.getItems().getName());

System.out.println(queryVo.getItems().getPrice());

 

return null;

}

在页面中传递参数需要在属性.属性的方式进行传递

 

 

 



原文地址:https://www.cnblogs.com/toby-ruan/p/9080327.html