SpringMVC 参数绑定意义及实现过程解析

参数绑定的定义

所谓参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller。从客户端请求key/value数据(比如get请求中包含的数据),经过参数绑定,将key/value数据绑定到controller方法的形参上。springmvc中,接收页面提交的数据是通过方法形参来接收。而不是在controller类定义成员变量接收。

SpringMVC中默认支持的类型

自定义参数类型进行绑定

对于有些参数类型,由于我们输入的参数的类型与实体类中的参数类型不同,因此导致传值不能成功,此时,需要进行参数类型绑定。下面以Date类型为例介绍怎样进行自定义参数类型绑定。

User.java

import java.util.Date;
public class User {
	private Integer id;
	private String username;
	private String sex;
	private Date birthday;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username == null ? null : username.trim();
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex == null ? null : sex.trim();
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}

JSP页面:注意输入框的 name 属性值和上面 POJO 实体类的属性保持一致即可映射成功。

<form action="pojo" method="post">
    用户id:<input type="text" name="id" value="2"></br>
    用户名:<input type="text" name="username" value="Marry"></br>
    性别:<input type="text" name="sex" value="女"></br>
    出生日期:<input type="text" name="birthday" value="2017-08-25"></br>
    <input type="submit" value="提交">
  </form>

因为我们输入的birthday是String类型,但是实体类中的birthday是Date类型,此时,就不会绑定成功,请求相应的controller会出现如下错误:

因此我们需要进行参数绑定。

参数绑定主要包括两步:

1. 新建一个类实现Converter接口

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

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

//需要实现Converter接口,这里是将String类型转换成Date类型
public class DateConverter implements Converter<String, Date> {

  @Override
  public Date convert(String source) {
    //实现将字符串转成日期类型(格式是yyyy-MM-dd HH:mm:ss)
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try {
      return dateFormat.parse(source);
    } catch (ParseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    //如果参数绑定失败返回null
    return null;
  }
}

2. 在配置文件中进行配置

<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
  <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
      <!-- 自定义转换器的类名 -->
      <bean class="com.ys.util.DateConverter"></bean>
    </property>
  </bean>

这样就完成了自定义参数类型的绑定。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 解决Spring Mvc中对象绑定参数重名的问题

    前言 本文主要给大家介绍了关于解决Spring Mvc对象绑定参数重名问题的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 发现问题 SpringMvc提供了对象参数绑定功能,例如Person对象有一个age字段, 则页面表单使用 <input type='text' name='age' value='25'> Controller中使用 public void getPerson(Person person){ // 此时person对象的age属性值为25 }

  • 关于Spring MVC同名参数绑定问题的解决方法

    前言 最近在使用Spring MVC接收参数的时候,碰到个同名参数绑定的问题,参考了好几篇文章才解决问题,所以自己在这里总结一下,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍: 比如,我的表单是这样的: <form action="/test.action" method="post"> <input name="user.name"> <input name="acc.name"&g

  • 解决SpringMVC接收不到ajaxPOST参数的问题

    问题 今天遇到一个问题,代码如下 java: @PostMapping(value = "/method") @ResponseBody public Object method(Integer id,String audit_content) { return null; } js: var data = {id:7,audit_content:"11111111111111111111a1"}; $.ajax({ type: "POST",

  • springmvc 参数绑定总结

    最近在学习springmvc,今天把springmvc 参数绑定给整理一下,也算个学习笔记吧! @RequestParam 绑定单个请求 RequestMapping(value = "/form2") @ResponseBody public String form2(@RequestParam String name){ logger.info("name=" + name ); return ""; } @RequestParam 有req

  • Spring MVC参数自动绑定List的解决方法

    最近遇到一个问题,在项目中需要传入一组对象.以前都只遇到过传入一个对象.多个对象或者一组数组的情况.很少遇到传入一组对象的情况.所以遇到这个问题的时候感觉有点棘手.本以为用这样的方法就能解决的. @RequestMapping("save1") public void save1(Plan plan, List<PlanItem> planItems, HttpServletResponse response) { //TODO more... addMessage(res

  • Spring MVC处理参数中的枚举类型通用实现方法

    前言 在开发的过程中,会涉及到大量的枚举类型数据,我们都知道,Springmvc本身能自动转换很多的数据类型,也支持你自定义转换类型,非常灵活. 本文主要介绍的是关于Spring MVC处理参数的枚举类型通用实现的相关内容,下面话不多说了,来一起看看详细的介绍吧 业务场景: 前端提交了枚举的一个属性value,想由spring来完成参数类型自动转换成对应的枚举. 比方有一个枚举 @AllArgsConstructor(access = AccessLevel.PRIVATE) @Getter @

  • [Spring MVC]-详解SpringMVC的各种参数绑定方式

    SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似): Controller代码: @RequestMapping("saysth.do") public void test(int count) { } 表单代码: <form action="saysth.do" method="post"> <input name="count" value="10" t

  • 一篇文章弄懂Spring MVC的参数绑定

    前言 参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller ?这在实际项目开发中也是用到的最多的,那么 SpringMVC 的参数绑定是怎么实现的呢? 下面我们来详细的讲解. SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了 下面通过5个常用的注解演示下如何进行参数绑定: 1. @PathVariable注解 @PathVariabl

  • SpringMVC 参数绑定意义及实现过程解析

    参数绑定的定义 所谓参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller.从客户端请求key/value数据(比如get请求中包含的数据),经过参数绑定,将key/value数据绑定到controller方法的形参上.springmvc中,接收页面提交的数据是通过方法形参来接收.而不是在controller类定义成员变量接收. SpringMVC中默认支持的类型 自定义参数类型进行绑定 对于有些参数类型,由于我们输入的参数的类型与实体类中的参数类

  • SpringMVC 参数绑定相关知识总结

    请求进入DispatcherServlet的doDispatch后,获取HandlerMethod.然后根据HandlerMethod来确认HandlerApapter,确认后执行HandlerAdapter的handle方法.这里确认HandlerApater为RequestMappingHandlerAdapter,在执行handlerMethod之前,需要处理参数的绑定. 1. 简单参数绑定 执行HandlerAdapter的handler方法后,进入RequestMappingHandl

  • SpringMvc web.xml配置实现原理过程解析

    1.spring 框架解决字符串编码问题:过滤器 CharacterEncodingFilter(filter-name) 2.在web.xml配置监听器ContextLoaderListener(listener-class) ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息.因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法. 3.部

  • springMVC 用户登录权限验证实现过程解析

    通过上网搜资料显示,使用filter和interceptor都可以实现.不过推荐使用interceptor. 下面就使用Interceptor实现用户登录权限验证功能. 拦截器需要实现Inceptor拦截器接口的三个方法. 1.preHandle方法 顾名思义,该方法将在请求处理之前进行调用.SpringMVC 中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个Interceptor .每个Interceptor 的调用会依据它的声明顺序依次执行,而且最

  • SpringMVC中参数绑定问题实例详解

    目录 前言 1. 参数绑定的过程 2. 默认支持的类型 3. 简单类型的绑定 4. pojo类型的绑定 4.1 普通pojo类型 4.2. 包装的pojo类型 5. 集合类型的绑定 5.1 数组的绑定 5.2 List的绑定 5.2 Map的绑定 总结 前言 众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springmvc中如何接收前台页面的参数,即spri

  • 详解Spring Boot Web项目之参数绑定

    一.@RequestParam 这个注解用来绑定单个请求数据,既可以是url中的参数,也可以是表单提交的参数和上传的文件 它有三个属性,value用于设置参数名,defaultValue用于对参数设置默认值,required为true时,如果参数为空,会报错 好,下面展示具体例子: 首先是vm: <h1>param1:${param1}</h1> <h1>param2:${param2}</h1> 好吧,就为了展示两个参数 第一种情况: @RequestMa

  • SpringMVC使用@PathVariable接收参数过程解析

    PathVariable 映射 URL 绑定的占位符 带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义 通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中. 使用MVC时,总是出现一些问题,当然都是使用造成的. 今天遇到一个问题,使用@PathVariable

随机推荐