RuoYi模块功能分析:第六章BaseController的@InitBinder分析

本文主要是介绍RuoYi模块功能分析:第六章BaseController的@InitBinder分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、参数转换处理(日期转换)
  • 二、指定参数前缀
  • 三、排除接收属性


前言

在若依项目中,定义了一个BaseController类位于package com.ruoyi.common.core.controller;包下。大部分的controller都继承了这个类。而这个类中有一个被@InitBinder描述的方法,被@InitBinder描述的方法当接口请求过来的时候会先走声明@InitBinder的方法然后才会走接口。那么就衍生出来常用的三种用法

  • 参数转换处理(日期转换)
  • 指定参数前缀
  • 排除接收属性

一、参数转换处理(日期转换)

我们都知道,前端传递过来的数据类型只可能是字符串或者数值类型,文件类型。js没有java中的long,date…这些类型,那么当前端传递过来2024-02-10 04:52:23我们直接用Date time接收会报错。

04:52:49.090 [http-nio-18100-exec-1] WARN  o.s.w.s.m.s.DefaultHandlerExceptionResolver - [logException,208] - Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value [2024-02-10 04:52:23]; nested exception is java.lang.IllegalArgumentException]

这个时候我们就需要对前端传递过来的字符串进行日期转换

@InitBinder
public void initBinder(WebDataBinder binder)
{// Date 类型转换binder.registerCustomEditor(Date.class, new PropertyEditorSupport(){@Overridepublic void setAsText(String text){	// 格式化参数setValue(DateUtils.parseDate(text));}});
}

二、指定参数前缀

首先我们先定义俩个类来接收参数

@Data
class Test1{String name;
}@Data
class Test2{String name;Long age;
}

定义一个接口,我们都知道当前端传递name=zhangsan,age=18。那么test1和test2的name会被同时附上值,这并不是我们想要的结果

@PostMapping("text")
public AjaxResult test(Test1 test1,Test2 test2){ArrayList<Object> arrayList = new ArrayList<>();System.out.println(String.format("test1 %s",test1));System.out.println(String.format("test2 %s",test2));return success(null);
}

可以看到,我们就传递了一个name但是test1和test2被同时附上了值
在这里插入图片描述
在这里插入图片描述
这个时候我们就可以通过@InitBinder来给参数加上前缀,来指定要被赋值的参数

    // 拦截当前接口参数名为test1的接口@InitBinder("test1")public void init(WebDataBinder binder){// 对参数名为test1的参数全部加上test1.前缀binder.setFieldDefaultPrefix("test1.");}@PostMapping("text")public AjaxResult test(Test1 test1,Test2 test2){ArrayList<Object> arrayList = new ArrayList<>();System.out.println(String.format("test1 %s",test1));System.out.println(String.format("test2 %s",test2));return null;}

这个时候咋发送请求就可以看到我们想要的结果
在这里插入图片描述
在这里插入图片描述

三、排除接收属性

我们也可以使用InitBinder来指定我们要排除接收的参数

 // 拦截当前接口参数名为test1的接口@InitBinder("test1")public void init(WebDataBinder binder){// 排除test1.namebinder.setDisallowedFields("name");}@PostMapping("text")public AjaxResult test(Test1 test1,Test2 test2){ArrayList<Object> arrayList = new ArrayList<>();System.out.println(String.format("test1 %s",test1));System.out.println(String.format("test2 %s",test2));return null;}

在这里插入图片描述
在这里插入图片描述

这篇关于RuoYi模块功能分析:第六章BaseController的@InitBinder分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/697134

相关文章

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

python urllib模块使用操作方法

《pythonurllib模块使用操作方法》Python提供了多个库用于处理URL,常用的有urllib、requests和urlparse(Python3中为urllib.parse),下面是这些... 目录URL 处理库urllib 模块requests 库urlparse 和 urljoin编码和解码

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

idea Maven Springboot多模块项目打包时90%的问题及解决方案

《ideaMavenSpringboot多模块项目打包时90%的问题及解决方案》:本文主要介绍ideaMavenSpringboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,... 目录1. 前言2. 问题3. 解决办法4. jar 包冲突总结1. 前言之所以写这篇文章是因为在使用Mav

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(