SpringMVC 【参数绑定详讲、默认支持参数类型、自定义参数绑定、RequestParam 注解】

SpringMVC 第四篇【参数绑定详讲、默认支持参数类型、自定义参数绑定、RequestParam 注解】

参数绑定

我们在 Controller 使用方法参数接收值,就是把 web 端的值给接收到 Controller 中处理,这个过程就叫做参数绑定

默认支持的参数类型

从上面的用法我们可以发现,我们可以使用 request 对象、Model 对象等等,其实是不是可以随便把参数写上去都行???其实并不是的…

Controller 方法默认支持的参数类型有 4 个,这 4 个足以支撑我们的日常开发了

  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • Model

参数的绑定过程

一般地,我们要用到自定义的参数绑定就是上面所讲的日期类型转换以及一些特殊的需求…. 对于平常的参数绑定,我们是无需使用转换器的,SpringMVC 就已经帮我们干了这个活了…

这里写图片描述

自定义绑定参数【版本一】

在上一篇我们已经简单介绍了怎么把字符串转换成日期类型了【使用的是 WebDataBinder 方式】… 其实那是一个比较老的方法,我们可以使用 SpringMVC 更推荐的方式…

在上次把字符串转换成日期类型,如果使用的是 WebDataBinder 方式的话,那么该转换仅仅只能在当前 Controller 使用… 如果想要全部的 Controller 都能够使用,那么我们可以使用 WebBindingInitializer 方式

如果想多个 controller 需要共同注册相同的属性编辑器,可以实现 PropertyEditorRegistrar 接口,并注入 webBindingInitializer 中。

实现接口

public class CustomPropertyEditor implements PropertyEditorRegistrar {@Overridepublic void registerCustomEditors(PropertyEditorRegistry binder) {binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"), true));}}

配置转换器

注入到 webBindingInitializer 中

    <!-- 注册属性编辑器 --><bean id="customPropertyEditor" class="cn.itcast.ssm.controller.propertyeditor.CustomPropertyEditor"></bean><!-- 自定义webBinder --><bean id="customBinder" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"><!-- propertyEditorRegistrars用于属性编辑器 --><property name="propertyEditorRegistrars"><list><ref bean="customPropertyEditor" /></list></property></bean><!-- 注解适配器 --><bean  class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><!-- 在webBindingInitializer中注入自定义属性编辑器、自定义转换器 --><property name="webBindingInitializer" ref="customBinder"></property></bean>

自定义参数转换器【版本二】

上面的方式是对象较老的,现在我们一般都是实现 Converter 接口来实现自定义参数转换… 我们就来看看实现 Converter 比上面有什么好

配置日期转换器

public class CustomDateConverter implements Converter<String, Date> {@Overridepublic 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> {@Overridepublic String convert(String source) {try {//去掉字符串两边空格,如果去除后为空设置为nullif(source!=null){source = source.trim();if(source.equals("")){return null;}}} catch (Exception e) {e.printStackTrace();}return source;}
}

从上面可以得出,我们想要转换什么内容,就直接实现接口,该接口又是支持泛型的,阅读起来就非常方便了…

配置转换器

        <!-- 转换器 --> <bean id="conversionService"class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters"><list><bean class="cn.itcast.ssm.controller.converter.CustomDateConverter"/><bean class="cn.itcast.ssm.controller.converter.StringTrimConverter"/></list>
</property>
</bean> <!-- 自定义webBinder --> <bean id="customBinder"class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> <!-- 使用converter进行参数转 -->
<property name="conversionService" ref="conversionService"/>
</bean> <!-- 注解适配器 --> <bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <!-- 在webBindingInitializer中注入自定义属性编辑器、自定义转换器 -->
<property name="webBindingInitializer" ref="customBinder"></property>
</bean> 

如果是基于 `` 的话,我们是这样配置的

<mvc:annotation-driven conversion-service="conversionService">
</mvc:annotation-driven>
<!-- conversionService --><bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><!-- 转换器 --><property name="converters"><list><bean class="cn.itcast.ssm.controller.converter.CustomDateConverter"/><bean class="cn.itcast.ssm.controller.converter.StringTrimConverter"/></list></property></bean>

@RequestParam 注解

我们一般使用的参数绑定都有遵循的规则:方法参数名要与传递过来的 name 属性名相同。

在默认的情况下,只有名字相同,SpringMVC 才会帮我们进行参数绑定…

如果我们使用 @RequestParam注解的话,我们就可以使方法参数名与传递过来的 name 属性名不同…

该注解有三个变量

  • value【指定 name 属性的名称是什么】
  • required【是否必须要有该参数】
  • defaultvalue 设置默认值

例子:我们的方法参数叫 id,而页面带过来的 name 属性名字叫 item_id,一定需要该参数

public String editItem(@RequestParam(value="item_id",required=true) String id) {}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL中 IS NULL、IS NOT NULL、不等于, 能用上索引吗?

MySQL的WHERE子句中包含 IS NULL、IS NOT NULL、! 这些条件时便不能使用索引查询&#xff0c;只能使用全表扫描。 告诉大家结论&#xff1a; MySQL中决定使不使用某个索引执行查询的依据就是成本够不够小&#xff0c;如果null值很多&#xff0c;还是会用到索引的。 自己做了个…

Java EE 企业网站_基于jsp的企业网站系统-JavaEE实现企业网站系统 - java项目源码...

基于jspservletpojomysql实现一个javaee/javaweb的企业网站系统, 该项目可用各类java课程设计大作业中, 企业网站系统的系统架构分为前后台两部分, 最终实现在线上进行企业网站系统各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类企业网站系统相关的实体…

MySQL创建联合索引,字段的先后顺序,对查询的影响分析

文章目录前言最左匹配原则为什么会有最左前缀呢&#xff1f;联合索引的存储结构联合索引字段的先后顺序b树可以存储的数据条数总结前言 ​ 对于联合索引我们知道&#xff0c;在使用的时候有一个最左前缀的原则&#xff0c;除了这些呢&#xff0c;比如字段放置的位置&#xff0…

php oracle 操作 sql语句中能不能添加数组_如何在PHP中使用Oracle数据库_php

在php3.0以上版本中&#xff0c;php内置了几乎目前所有的数据库处理函数&#xff0c;包括oracle;在本文中我们通过一个实例来介绍了如何使用这些函数来操作Oracle数据库。PHP提供了2大类API(应用程序接口)来操作Oracle数据库。一个是标准的Oracle处理函数(ORA) 另一个是Oracle …

mysql where过滤条件中and连接的两个条件的顺序不必和建立的联合索引的字段顺序一致_mysql and 顺序_mysql执行过程以及顺序

mysql中and的判断顺序 select * from a join b on 条件一 and 条件二条件一和二都是判断 id 字段&#xff0c; 条件一和条件二哪个先执行&#xff1f; 解析器会自动选择最优的流程执行的 这两个都是平级条件&#xff0c;理论上是没有先后顺序的&#xff01; 没有顺序&#xff…

MySQL优化器_MySQL查询优化器

MySQL优化器 MySQL架构图 讲到MySQL&#xff0c;就绕不开他的架构图。MySQL是一个经典的C/S架构。服务器这边分两层&#xff1a;第一层是Server层&#xff0c;第二层是存储引擎。Server层处理主要的业务操作流程&#xff0c;但不关心具体的存储逻辑。存储逻辑由存储引擎层去…

MySQL性能优化(一)MySQL中SQL语句是如何执行的?

该篇章将开始整理MySQL的优化&#xff0c;不过开始之前&#xff0c;我们想了解清楚那就是MySQL是怎么执行的。 文章目录1.MySQL驱动2.应用系统数据库连接池3.MySQL数据库连接池4.SQL执行过程4.1.线程监听&#xff1a;监听网络请求中的SQL语句4.2.SQL接口&#xff1a;负责处理接…

2023_Spark_实验三十三:配置Standalone模式Spark3.4.2集群

实验目的&#xff1a;掌握Spark Standalone部署模式 实验方法&#xff1a;基于centos7部署Spark standalone模式集群 实验步骤&#xff1a; 一、下载spark软件 下载的时候下载与自己idea里对应版本的spark News | Apache Spark 选择任意一个下载即可 - spark 3.4.1 - spark …

MySQL性能优化(二)InnoDB之日志文件

文章目录1.MySQL日志记录文件1.1.回顾SQL语句的执行1.2.InnoDB内存结构&#xff1a;缓冲池1.3.记录日志&#xff1a;Undo和Redo1.3.1.Undo日志文件&#xff1a;记录数据修改前的值1.3.2.Redo日志文件&#xff1a;记录数据即将修改值1.3.3.Undo和Redo的区别&#xff08;记录、前…

php正则检查QQ,PHP 正则匹配手机号的QQ号

//匹配手机号码//$mode /\d{3}-\d{8}|\d{4}-\d{7}|\d{11}/;//不匹配以-开头的手机号码//$mode /^((?!-).)*\d{3}-\d{8}|^((?!-).)*\d{4}-\d{7}|^((?!-).)*\d{11}/;//不匹配以 / 开头或结束的手机号码$mode /^((?!\/).)*\d{3}-\d{8}((?!\/).)*$|^((?!\/).)*\d{4}-\d{7}…

java获取单击内容,java – 单击菜单链接时,获取元素不是可点击的异常

我想点击菜单链接但没有运气.它总是显示异常 –Exception in thread “main” org.openqa.selenium.WebDriverException:unknown error: Element is not clickable at point (64, 64). Otherelement would receive the click: <div style”position: absolute; left:0px; to…

MySQL性能优化(三)Buffer Pool实现原理

文章目录1.回顾缓冲池 Buffer Pool2.配置Buffer Pool的大小3.Buffer Pool&#xff1a;数据结构3.1.磁盘数据结构&#xff1a;数据页3.2.缓冲池数据结构&#xff1a;数据页(缓存页)3.3.缓存页对应的描述信息4.Buffer Pool&#xff1a;初始化5.Buffer Pool&#xff1a;free链表6.…

MySQL性能优化(四)redo log实现原理

文章目录1.redo log的作用2.redo log的结构2.1.redo log 记录2.2.redo log block2.3.redo log buffer3.redo log buffer 刷盘1.redo log的作用 首先我们都知道&#xff0c;执行增删改SQL语句的时候&#xff0c;都是针对一个表中的某些数据去执行的&#xff0c;此时的话&#x…

MySQL性能优化(五)undo log是如何实现MVCC的?

之前我们最开始的几篇文章就讲过&#xff0c;你除了写redolog日志还必须要写undo log日志&#xff0c;这个undo log日志是至关重要的&#xff0c;没有他&#xff0c;你根本都没办法回滚事务&#xff01; 1.事务 1.1.多线程并发执行多个事务 对于我们的业务系统去访问数据库而…

Linux中Shell脚本--awk的用法

语法格式&#xff1a;awk [选项] ‘指令’ 操作文件 常用选项&#xff1a;-F 指定分隔符&#xff0c;分隔符用""引起来 -v&#xff1a;varvalue在awk程序开始之前指定一个值valu给变量var&#xff0c;这些变量值用于awk程序的BEGIN快 -f&#xff1a;后面跟一个保存…

linux下的shell脚本(基础)

Shell是一种脚本语言&#xff0c;那么&#xff0c;就必须有解释器来执行这些脚本&#xff0c;常见的脚本解释器有&#xff1a; bash&#xff1a;是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成&#xff0c;是BourneAgain Shell的缩写&#xff0c;内部命令一共有…

mysql rsync复制,mysql复制又同步

mysql复制再同步由于一个老旧系统没有使用LVM分区,导致mylvmbackup不能使用。为了重新全量同步数据库&#xff0c;发现rsync可以使用&#xff0c;并且锁住数据库的时间不长。1. 首先刷新数据库到文件flush tables with read lock;unlock tables;2. 执行rsync进行数据库同步/usr…

解决springboot中只支持get请求,无法支持post请求

解决springboot中只支持get请求&#xff0c;无法支持post请求 报错信息如下&#xff1a; 405 相关类如下&#xff1a; RestController RequestMapping public class HttpServiceController {Autowiredprivate HttpSecretReport httpSecretReport;Autowiredprivate HttpSecret…

mysql2005卸载步骤,二次安装mysql步骤

1.先将mysql服务停止&#xff0c;并关闭服务页面(否则后面报错&#xff1a;“指定的服务已经标记为删除”)&#xff1a;打开“任务管理器”可以找到服务页面2.在控制面板对mysql进行删除。找到并将其卸载&#xff0c;如果没有直接跳过3.在注册表中删除相关目录。(使用组合键&qu…

Spring Boot 默认数据源 HikariDataSource_Spring Boot 中使用 Hikari

Spring Boot 默认数据源 HikariDataSource springboot2.x之后&#xff0c;系统的默认数据源由原来的的org.apache.tomcat.jdbc.pool.DataSource更改为com.zaxxer.hikari.HikariDataSource。 HikariDataSource 号称 Java WEB 当前速度最快的数据源&#xff0c;相比于传统的 C3…