首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

spring boot自定义验证器运行两次

Spring Boot是一个用于快速开发Java应用程序的开源框架。它基于Spring框架,简化了Java应用程序的配置和部署过程,提供了一种快速、方便的方式来构建独立的、可执行的Spring应用程序。

自定义验证器是Spring Boot中用于验证用户输入数据的一种机制。它允许开发人员定义自己的验证规则,并在用户提交表单数据时对其进行验证。自定义验证器通常用于验证表单字段的格式、长度、唯一性等。

在Spring Boot中,自定义验证器可能会运行两次的原因有以下几种可能性:

  1. 数据绑定阶段:在用户提交表单数据时,Spring Boot会自动进行数据绑定,将用户输入的数据绑定到相应的Java对象中。在这个过程中,自定义验证器可能会被调用一次,用于验证绑定后的数据的格式和有效性。
  2. 校验阶段:在数据绑定完成后,Spring Boot会调用校验器对绑定后的数据进行进一步的验证。这个阶段也会触发自定义验证器的调用,用于执行更复杂的验证逻辑,例如验证字段之间的关联关系、调用外部服务进行验证等。

为了解决自定义验证器运行两次的问题,可以采取以下几种方式:

  1. 检查验证器的调用时机:确保自定义验证器只在需要的时候被调用,避免重复验证。可以通过调整验证器的注解或配置来控制验证器的调用时机。
  2. 使用条件注解:可以使用Spring Boot提供的条件注解,根据特定的条件来决定是否执行验证器。例如,可以使用@ConditionalOnProperty注解来指定某个属性的值,当满足条件时才执行验证器。
  3. 缓存验证结果:如果自定义验证器的执行结果是不变的,可以将验证结果缓存起来,避免重复执行验证逻辑。可以使用缓存框架如Redis或Guava来实现结果的缓存。

总结起来,Spring Boot自定义验证器可能会运行两次的原因是数据绑定阶段和校验阶段都会触发验证器的调用。为了解决这个问题,可以检查验证器的调用时机,使用条件注解来控制验证器的执行,或者缓存验证结果以避免重复执行验证逻辑。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring Boot 2 实战:自定义启动运行逻辑

throws Exception; } CommandLineRunner 作用是当springApplication 启动后,在同一应用上下文中定义的多个 CommandLineRunner 类型的 Spring...进阶操作 —— 读取通过Spring Boot命令行启动注入的参数 达到我们开篇的期望结果。那么这两个接口啥区别呢?...Spring 官方不会吃饱了没事干弄两个这来折腾人,应该是有区别的,根据接口方法 run 方法可以看出来参数都不一样,额外科普一下 Spring Boot 如何传递额外参数通过命令行 执行 java -...Boot 命令行参数。...解决了如何在 Spring Boot 启动时执行一些逻辑的问题以及如何来编排多个启动逻辑的优先级顺序。同时我们进阶一步,通过这两个方法读取 Spring Boot 启动项参数。

72340

Spring Boot 都在哪运行

今天介绍 3 种运行 Spring Boot 应用的方式,看大家用过几种? 1、在 IDE 中运行 在 Eclipse、IDEA 中直接运行,又有以下两种方式。...这个时候,直接在 IDE 中运行这个 main 方法就能启动 Spring Boot 应用了。 ?...war 包方式 如果你的应用改装成了 war 包方式部署,这个时候就需要在 IDE 中配置 Server,然后在 Server 中加入你的 Spring Boot 项目,最后运行这个 Server 即可...2、打包运行 当你的 Spring Boot 准备提测或者上线,都需要打成 jar 包或者 war 包运行,war 包方式这里不说直接丢到 Server 里面运行即可,这里介绍直接运行 jar 包的方式...可以在 IDE 或者命令行中使用 Maven 和 Gradle 插件来运行 Spring Boot 应用。

82920

Spring Boot 核心运行原理介绍

那很多读者就要问了,Spring Boot 它是如何来约定的呢?又是如何实现自动配置功能的呢?从本篇开始,笔者将带领大家通过学习 Spring Boot 源码,来了解它核心的运行原理。...核心运行原理图在我们的项目中,接入 Spring Boot 其实是最简单的。...我们先从整体上来看一下 Spring Boot 实现上述自动配置机制的核心运行原理图:上图描述了 Spring Boot 自动配置功能运作过程中涉及的几个核心功能及其相互之间的关系,其中的内容将在第3小节介绍...自动配置的整体流程从上面的 Spring Boot 自动配置功能核心运行原理图,我们可以了解它自动配置的整体流程,如下:首先 Spring Boot 通过 @EnableAutoConfiguration...spring.factories 也可以包含其他类型待注册的类。该配置文件不仅存在于 Spring Boot 项目中,也可以存在于自定义的自动配置(或 Starter)项目中。

16131

Spring Boot 自定义 starter

> 关于web的一些自动配置都写在了这里 ,所以我们有总结: 启动starter只是用来做依赖管理 需要专门写一个类似spring-boot-autoconfigure的配置模块...用的时候只需要引入启动starter,就可以使用自动配置了 命名规范 官方命名空间 前缀:spring-boot-starter- 模式:spring-boot-starter-模块名 举例:spring-boot-starter-web...、spring-boot-starter-jdbc 自定义命名空间 后缀:-spring-boot-starter 模式:模块-spring-boot-starter 举例:mybatis-spring-boot-starter...三、自定义starter实例 我们需要先创建两个工程 hello-spring-boot-starter 和 hello-spring-boot-starter-autoconfigurer 1. hello-spring-boot-starter...三、测试自定义starter 我们创建个项目 hello-spring-boot-starter-test,来测试系我们写的stater。 1. pom.xml <?

74350

IDEA 编译运行 Spring Boot 2.0 源码

下载代码切换分支 首先到GitHub上clone下Spring Boot的代码: git clone https://github.com/spring-projects/spring-boot.git...Boot源码打包并安装到本地maven仓库,在打包过程中会忽略测试,因为运行单元测试时间特别长,下载源码的目的是学习和分析Spring Boot的原理,而并不是做定制开发,因此一些不影响学习的单元测试可以忽略掉.../spring-boot-tools下的spring-boot-gradle-plugin项目,一个比较暴力的解决办法是直接删掉这个项目下的src/test/java,不运行这个项目的单测,因为暂时也用不到它...测试 打包成功之后,在spring-boot/spring-boot-project目录下创建一个Spring Boot项目测试一下自己编译的源码是否可以正常运行,在spring-boot-project...,才可以运行的测试项目,因为这个插件会对代码进行检查,检查失败的话,服务运行不起来。

1.6K20

spring boot框架学习7-spring boot的web开发(3)-自定义消息转换

好了,现在开启spring boot的web开发第一节 本节主要: 1:自定义消息转换 本文是《凯哥陪你学系列-框架学习之spring boot框架学习》中第七篇 spring boot框架学习7-spring...一:自定义消息转换 1.1:消息转换能干嘛? 最常见的是设置编码格式的。 1.2:自定义消息转换怎么假如到spring容器中呢?...自定义消息转化,只需要在@Configuration的类中添加消息转化的@bean加入到Spring容器,就会被Spring Boot自动加入到容器中。...测试spring boot默认编码格式: ? 思考:上面接口,返回的中文是什么?乱码吗? 运行查看:‘ ? 不乱码,说明spring boot默认的编码格式就是utf-8的。...通过自定义消息转换,将编码修改给 ISO-8859-1后运行。 ? 通过源码查看spring boot默认配置: ? 总结: 在本章节,我们主要是学会怎么配置自定义的消息转换

54040

spring boot项目生成容器并运行

springboot项目生成容器并运行背景将springboot项目打包成jar包,上传到服务并打包成镜像,运行成docker容器对外提供服务。...问题场景本地的springboot服务编写好代码之后,需要同步到服务。...在服务上,服务是以容器的形式运行的,所以需要经过以下步骤:图片解决方案效率化首选的shell脚本,使用rsync工具上传jar包到服务,在服务器使用docker相关的命令进行构建镜像和运行生成容器提供服务具体实现...upload.sh本地打包构建服务,生成一个jar包,上传到服务#!...,"-XX:+UseCGroupMemoryLimitForHeap"]deploy.sh正如我的脚本注释所说:to run jar as a docker container,即将jar包生成镜像并运行成容器

14110

Spring Boot应用的后台运行配置

酱油一篇,整理一下关于Spring Boot后台运行的一些配置方式。...在介绍后台运行配置之前,我们先回顾一下Spring Boot应用的几种运行方式: - 运行Spring Boot的应用主类 - 使用Maven的Spring Boot插件`mvn spring-boot...Linux/Unix 下面我们来说说服务上该如何来配置。实际上,实现的方法有很多种,这里就列两种还比较好用的方式: nohup nohup 命令 用途:不挂断地运行命令。...在Spring Boot的Maven插件中,还提供了构建完整可执行程序的功能,什么意思呢?就是说,我们可以不用java -jar,而是直接运行jar来执行程序。...这样我们就可以方便的将其创建成系统服务在后台运行了。主要步骤如下: 1. 在pom.xml中添加Spring Boot的插件,并注意设置executable配置 ? 2.

2.1K60

Spring Boot 自定义日志详解

Spring Boot 日志综合介绍 Spring Boot 内部代码使用的是 commons-logging 来记录日志的,但是底层日志实现框架是可以随意替换的。...Spring Boot为 Java Util Logging, Log4J2, 和 Logback 日志框架提供了默认配置。 Spring Boot支持的日志框架默认配置如下。...Spring Boot 默认提供配置的形式非常简单,只适合简单的日志应用,虽然说日志输出格式可以自定义,但日志文件如何按天滚动等其他更复杂的策略却不能配置,只能通过自定义引用日志文件的形式。...Spring Boot 定制日志文件 简单的日志配置不能满足实际项目需求,那可以通过引用定制日志文件的形式达到目的。Spring Boot能根据类路径下的类库和配置文件自动配置对应的日志框架。...xx-spring 这是 Spring Boot 推荐的命名方式,否则 Spring Boot 不能完全控制日志初始化,因为默认命名配置文件 logback.xml 加载较早不能获取到 application.properties

66810
领券