一、概述

1.3 参数绑定过程


153805

1.2 @RequestParam

  • 如果request请求的参数名和controller方法的形参数名称一致,适配器自动进行参数绑定。如果不一致可以通过 @RequestParam 指定request请求的参数名绑定到哪个方法形参上。
  • 对于必须要传的参数,通过@RequestParam中属性required设置为true,如果不传此参数则报错。
  • 对于有些参数如果不传入,还需要设置默认值,使用@RequestParam中属性defaultvalue设置默认值。

  • 可以绑定简单类型:整型、字符串、单精/双精度、日期、布尔型。

  • 可以绑定简单pojo类型

    • 简单pojo类型只包括简单类型的属性。
    • 绑定过程:request请求的参数名称和pojo的属性名一致,就可以绑定成功。
  • 问题:

    • 如果controller方法形参中有多个pojo且pojo中有重复的属性,使用简单pojo绑定无法有针对性的绑定,
    • 比如:方法形参有items和User,pojo同时存在name属性,从http请求过程的name无法有针对性的绑定到items或user。

二、自定义绑定使用属性编辑器

  • springmvc没有提供默认的对日期类型的绑定,需要自定义日期类型的绑定。

2.1 使用WebDataBinder(了解)

  • 在controller类中定义:
//自定义属性编辑器
// @InitBinder
// public void initBinder(WebDataBinder binder) throws Exception {
// // Date.class必须是与controler方法形参pojo属性一致的date类型,这里是java.util.Date
// binder.registerCustomEditor(Date.class, new CustomDateEditor(
// new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"), true));
// }
  • 使用这种方法问题是无法在多个controller共用。

2.2 使用WebBindingInitializer(了解)

  • 使用WebBindingInitializer让多个controller共用 属性编辑器。
  • 自定义WebBindingInitializer,注入到处理器适配器中。
  • 如果想多个controller需要共同注册相同的属性编辑器,可以实现PropertyEditorRegistrar接口,并注入webBindingInitializer中。
public class CustomPropertyEditor implements PropertyEditorRegistrar {

    @Override
public void registerCustomEditors(PropertyEditorRegistry binder) {
binder.registerCustomEditor(Date.class, new CustomDateEditor(
new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"), true));
} }
  • 配置如下:
<!-- 注册属性编辑器 -->
<!-- 注册属性编辑器 -->
<bean id="customPropertyEditor"
class="com.hao.ssm.controller.propertyeditor.CustomPropertyEditor"></bean> <!-- 自定义webBinder -->
<bean id="customBinder"
class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="propertyEditorRegistrars">
<list>
<ref bean="customPropertyEditor"/>
</list>
</property>
</bean> <!--注解适配器 -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitializer" ref="customBinder"></property>
</bean>

三、自定义参数绑定使用转换器

3.1 实现Converter接口

  • 定义日期类型转换器和字符串去除前后空格转换器。
public class CustomDateConverter implements Converter<String, Date> {

    @Override
public Date convert(String source) { try {
//进行日期转换
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(source); } catch (Exception e) {
e.printStackTrace();
} return null;
} }
public class StringTrimConverter implements Converter<String, String> {

    @Override
public String convert(String source) { try {
//去掉字符串两边空格,如果去除后为空设置为null
if(source!=null){
source = source.trim();
if(source.equals("")){
return null;
}
} } catch (Exception e) {
e.printStackTrace();
} return source;
} }

3.2 配置转换器

    <!-- 转换器 -->
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.hao.ssm.controller.converter.CustomDateConverter" />
<bean class="com.hao.ssm.controller.converter.StringTrimConverter" />
</list>
</property>
</bean>

【SpringMVC】参数绑定的更多相关文章

  1. 一篇文章搞定SpringMVC参数绑定

    SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了 下面通过5个常用的注解演示下如何进行 ...

  2. [转载]SpringBoot系列: SpringMVC 参数绑定注解解析

    本文转载自 https://www.cnblogs.com/morethink/p/8028664.html, 作者写得非常好, 致谢! SpringMVC 参数绑定注解解析   本文介绍了用于参数绑 ...

  3. SpringMVC参数绑定,这篇就够了!

    SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了 下面通过5个常用的注解演示下如何进行 ...

  4. SpringMvc参数绑定出现乱码解决方法

    在SpringMvc参数绑定过程中出现乱码的解决方法 1.post参数乱码的解决方法 在web.xml中添加过滤器 <!-- 过滤器 处理post乱码 --> <filter> ...

  5. SpringMVC参数绑定(未完待续)

    1. Strut2与SpringMVC接收请求参数的区别 Struts2通过action类的成员变量接收SpringMVC通过controller方法的形参接收 2. SpringMVC参数绑定流程 ...

  6. SpringMVC参数绑定(从请求中接受参数)

    参数绑定(从请求中接收参数) 1)默认类型: 在controller方法中可以有也可以没有,看自己需求随意添加. httpservletRqeust,httpServletResponse,httpS ...

  7. SpringMVC 参数绑定注解解析

    本文介绍了用于参数绑定的相关注解. 绑定:将请求中的字段按照名字匹配的原则填入模型对象. SpringMVC就跟Struts2一样,通过拦截器进行参数匹配. 代码在 https://github.co ...

  8. SpringMVC参数绑定总结

    springMvc作用:    a) 接收请求中的参数    b) 将处理好的数据返回给页面参数绑定(就是从请求中接收参数):    a) 默认支持的类型: request, response, se ...

  9. SpringMVC参数绑定(四)

    1.默认支持的参数类型 处理器形参中添加如下类型的参数处理适配器会默认识别并进行赋值. HttpServletRequest 通过request对象获取请求信息 HttpServletResponse ...

  10. SpringMVC参数绑定、Post乱码解决方法

    从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上. springmvc中,接收页面提交的数据是通过方法形参来接收.而不是在control ...

随机推荐

  1. ES6深入浅出-8 新版的类(下集)-1.简单语法

    回顾 当你声明一个空的对象obj的时候,会生成一块内存这个内存里面什么都没有,自由__proto__存在401的地址. 也就是Object的protototype在内存中的地址 类 通过函数创建类.这 ...

  2. 软件定义网络基础---SDN的发展

    一:发展初期阶段--提出 架构.设计思想和实现技术的提出 二:发展中期阶段--企业加入,推动发展 三:SDN的发展趋势 (一)SD-DC SDN被大规模应用数据中心的服务器和设备部署运维,产生了软件定 ...

  3. NETTY keeplive 参数,心跳检测

    当设置为true的时候,TCP会实现监控连接是否有效,当连接处于空闲状态的时候,超过了2个小时,本地的TCP实现会发送一个数据包给远程的 socket,如果远程没有发回响应,TCP会持续尝试11分钟, ...

  4. Egg.js中使用sequelize事务

    对数据库的操作很多时候需要同时进行几个操作,比如需要同时改动几张表的数据,或者对同一张表中不同行(row)或列(column)做不同操作,比较典型的例子就是用户转账问题(A账户向B账号汇钱): 1 从 ...

  5. web端自动化——自动化测试准备工作

    准备工作# 在开始自己项目的自动化测试之前,我们最好已经完成了下面的准备工作: 1.熟悉待测系统 对项目的待测系统整体功能和业务逻辑有比较清晰的认识. 2.编写系统的自动化测试用例大纲和自动化测试用例 ...

  6. CF1281B Azamon Web Services

    思路: 贪心,找到将s至多交换一次所能得到的字典序最小的字符串,再与c比较. 实现: #include <bits/stdc++.h> using namespace std; int m ...

  7. pv回收

    学习cloudman中的k8s 152课,创建pod时,需要在k8s-host2 中挂着到在k8s-master 中/nfs中创建的挂载目录,结果提示没有/nfs/pv1 root@k8s-maste ...

  8. Quartz.Net—DateBuilder

    定时框架中最重要的就是时间,我们也可以直接使用Cron这种事件格式.  使用其他的时间格式,就可以用DateBuilder快速的创建出需要的时间. 因为quartz是一个定时框架,所以对于操控时间  ...

  9. 从零开始学Flask框架-003

    index.py from flask import Flask,render_template from flask_bootstrap import Bootstrap #初始化 app = Fl ...

  10. 网络编程 - 端口 & 地址占用

    1.设置地址复用(还可以设置端口复用): int enable=1; if (setsockopt(socketfd,SOL_SOCKET,SO_REUSEADDR,&iEnable,size ...