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保留字不能作为字段名使用_Table字段不能设为关键字range,range在mysql中是分区,是mysql的关键字

mysql 中Table字段不能设为关键字range&#xff0c;range在mysql中是分区,是mysql的关键字 在设计MySQL字段的时候&#xff0c;无意中使用InOut这个名称作为字段名称&#xff0c;结果前端提交后就是没有写入数据库&#xff01;但后端没有任何提示&#xff0c;跟踪mySQL日志&…

java+的数组分割符_Java:使用分隔符连接基元数组

小编典典这是我想出的。有几种方法可以执行此操作&#xff0c;它们取决于您使用的工具。使用StringUtils和ArrayUtils来自CommonLang&#xff1a;int[] arr new int[] {1, 2, 3, 4, 5, 6, 7};String result StringUtils.join(ArrayUtils.toObject(arr), " - ");您不…

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…

php开发电商项目的技术,[项目实战] php电商开发基本功课程 电商后台实战开发视频教程 共6章...

1-1需求分析.mp41-2 数据表建立.mp41-3 前期准备.mp42-1 验证码制作.mp42-2 数据库操作函数封装.mp42-3 登录验证.mp42-4 自动登录功能.mp42-5 后台用户信息管理.mp42-6 分页页码代码封装.mp42-7 后台用户信息分页页码制.mp43-1 添加分类信息.mp43-2 显示分类信息.mp43-3 修改分…

MySQL优化器_MySQL查询优化器

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

php取商,PHP获取百度关键词排名

PHP获取百度关键词排名$k$_GET[‘k’] ? $_GET[‘k’] : ‘蓝普网络‘;$u$_GET[‘u’] ? $_GET[‘u’] : ‘www.wbphp.cn’;$rn’50’;$url “https://www.baidu.com/s?ieutf-8&wd”.$k.”&rn”.$rn;$ch curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_se…

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

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

php通过ajax下载文件,通过Ajax如何请求下载Execl文件

本篇文章给大家分享的是关于通过Ajax如何请求下载Execl文件&#xff0c;内容很不错&#xff0c;有需要的朋友可以参考一下&#xff0c;希望可以帮助到大家。通过Ajax请求下载Execl 的问题&#xff0c;掉进一个坑里半个多小时&#xff0c;特此来记录一下 。起初 我误以为是后台的…

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.…

import java.awt.event.;是什么意思,。import java.awt.*;import java.awt.event.*;import...

Photoshop软件是一种()。问卷中的一些词汇,如“经常”“通常”等已经成为人们有较大共识的词话,可以在设计时大量采用。不是主动脉弓的分支有如果合同中规定要求卖方货交船上,即完成交货,这可能属于 ( )关于CRTSI型板式无砟轨道中框架式特点叙述正确的有()。10kV配电线供电距离…

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…

js二维数组传递java,ActiveX获取JavaScript传递的二维数组

此文参考了http://blog.csdn.net/playstudy/article/details/8259737&#xff0c;在此基础上做了改进// WebDlg.idl : WebDlg 的 IDL 源//// 此文件将由 MIDL 工具处理以// 产生类型库(WebDlg.tlb)和封送处理代码。#include "olectl.h"import "oaidl.idl";…