后端参数校验

前后端交互之后端参数 1.直接传参 public void login(HttpServletRequest request) { String password = request.getParameter("password"); } 2.@RequestParam注解 @RequestMapping(value = "/login", method = RequestMethod... 阅读详情

1.建一个springboot项目

2.导入相应的jar包

  <!--参数校验        -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>jakarta.el</artifactId>
            <version>3.0.3</version>
        </dependency>

pojo类中定义参数


/**
 * @author 小乌龟
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="保存Article对象", description="文章删除状态 0 表示为删除 1 表示已经删除")
public class SaveArticleVO {
    //    @NotNull 限制传入的值不为null。作用在int,Integer等数值类型上时,在限制不为null的同时也不能为空字符串。作用在String上时,限制不为null但是可以为空字符串。作用在类上时,限制不为null。
    //    @NotEmpty 作用于String类型,限制不能为null,且长度不为0,可以是空格字符串。
    //    @NotBlank 作用于String类型,限制不能为null,且去掉空格,即trim之后,长度不为0。
    //    @Max 作用于数值类型,限制最大值(包含该最大值)
    //    @Min 作用于数值类型,限制最小值(包含该最小值)
    //    @Email 作用于String类型,验证是否符合email格式

    private static final long serialVersionUID = 1L;



    @NotBlank(message = "文章标题不能为空")
    @ApiModelProperty(value = "文章标题")
    private String article_name;

    @NotBlank(message = "文章内容不能为空")
    @ApiModelProperty(value = "文章内容")
    private String article_content;

    @NotBlank(message = "文章简介不能为空")
    @ApiModelProperty(value = "文章简介")
    private String synopsis;
    
   public static Article saveArticleVO(SaveArticleVO article){
        Article article1 = new Article();
        article1.setArticle_name(article.getArticle_name());
        article1.setArticle_content(article.getArticle_content());
        article1.setSynopsis(article.getSynopsis());
        return  article1;
    }


}

第一种方法 controller 中使用参数校验

/**
 * @author 小乌龟
 */
@RestController
@RequestMapping("/article")
@Api(tags = {"文章"})
@Validated //对本类中的方法 开启验证功能
public class ArticleController extends BaseController{
    @Autowired
    private IArticleService iArticleService;

    @PostMapping("/add")
    @ApiOperation("添加文章")
    public Results saveArticle(@Valid /*校验后面的参数 */ SaveArticleRo article) {
        return iArticleService.saveArticle(article);
    }
}

第二种方法 在service中使用

(推荐 controller层中可能接收的不仅仅是前端传来的数据 还可以是别的接口数据 比如 微信支付接口 调回数据 所以可以在service中处理全部的数据)

接口:

    /**
      *保存文章
      * @param article
      * @return Results
      * @author zhangjunrong
      * @date 2022/1/28 17:17
      */
    Results saveArticle(@Valid SaveArticleVO article);

类:

list验证:

 

分组验证: 

 

bean 参数之间 关联  关系 controller举例

 

 

 官网

package org.hibernate.validator.referenceguide.chapter05.groupsequenceprovider;

public class RentalCarGroupSequenceProvider
        implements DefaultGroupSequenceProvider<RentalCar> {

    @Override
    public List<Class<?>> getValidationGroups(RentalCar car) {
        List<Class<?>> defaultGroupSequence = new ArrayList<Class<?>>();
        defaultGroupSequence.add( RentalCar.class );

        if ( car != null && !car.isRented() ) {
            defaultGroupSequence.add( CarChecks.class );
        }

        return defaultGroupSequence;
    }
}

 

package org.hibernate.validator.referenceguide.chapter05.groupsequenceprovider;

@GroupSequenceProvider(RentalCarGroupSequenceProvider.class)//核心
public class RentalCar extends Car {

    @AssertFalse(message = "The car is currently rented out", groups = RentalChecks.class)
    private boolean rented;

    public RentalCar(String manufacturer, String licencePlate, int seatCount) {
        super( manufacturer, licencePlate, seatCount );
    }

    public boolean isRented() {
        return rented;
    }

    public void setRented(boolean rented) {
        this.rented = rented;
    }
}

常用校验注解

@Null 只能是null
@NotNull 不能为null 注意用在基本类型上无效,基本类型有默认初始值
@AssertFalse 必须为false
@AssertTrue 必须是true

字符串/数组/集合检查:(字符串本身就是个数组)
@Pattern(regexp="reg") 验证字符串满足正则
@Size(max, min) 验证字符串、数组、集合长度范围
@NotEmpty 验证字符串不为空或者null
@NotBlank 验证字符串不为null或者trim()后不为空

数值检查:同时能验证一个字符串是否是满足限制的数字的字符串
@Max 规定值得上限int
@Min 规定值得下限
@DecimalMax("10.8") 以传入字符串构建一个BigDecimal,规定值要小于这个值 
@DecimalMin 可以用来限制浮点数大小
@Digits(int1, int2) 限制一个小数,整数精度小于int1;小数部分精度小于int2
@Digits 无参数,验证字符串是否合法
@Range(min=long1,max=long2) 检查数字是否在范围之间
这些都包括边界值

日期检查:Date/Calendar
@Post 限定一个日期,日期必须是过去的日期
@Future 限定一个日期,日期必须是未来的日期

其他验证:
@Vaild 递归验证,用于对象、数组和集合,会对对象的元素、数组的元素进行一一校验
@Email 用于验证一个字符串是否是一个合法的右键地址,空字符串或null算验证通过
@URL(protocol=,host=,port=,regexp=,flags=) 用于校验一个字符串是否是合法URl

 

Java后端Controller参数校验的一些干货及问题~ DTO参数对应属性上加入校验规则注解开启校验,在对应的方法参数前面加@Validated普通参数控制器类上加入@Validated注解) 阅读详情

相关推荐

【参数校验】的实现方案:前端校验、后端校验、数据库校验

参数校验的实现可以根据具体的应用场景、技术栈和业务需求选择不同的方法。以下是几种常见的实现方式,以及在不同层次(如前端、后端、数据库层)上如何进行参数校验的指导。通过以上多层次、多角度的参数校验策略,我们可以构建出既安全又高效的系统,确保数据的质量和用户体验的同时,也提高了系统的稳定性和可维护性。前端校验是用户提交数据的第一道防线,它可以提供即时反馈,改善用户体验,并减少不必要的网络请求。后端校验是确保数据安全性和准确性的关键,它不应该依赖于前端校验,因为前端的验证可以被绕过。参数校验,应如何实现?

m0_74825260的博客 1074

后端如何进行参数校验?

对于用户输入的数据来说,不只前端要校验数据,后端也要对数进行校验,比如入参是否可以为空、入参长度是否满足你的期望长度

幻雨的博客 2730

别再只会调速度了!用STM32的定时器中断精准控制伺服电机转角(避坑指南)

本文详细介绍了如何利用STM32的定时器中断和PWM输出实现伺服电机的精准转角控制,避免常见的速度控制误区。通过硬件配置、脉冲计数逻辑和优化技巧的实战讲解,帮助开发者掌握高精度位置控制方法,适用于工业自动化和机器人控制等场景。

weixin_42531163的博客 415

后端门卫 - 参数校验方式总结

在我们日常开发的工作中 一定会遇到参数接收 有些开发可能不会太关注参数校验这方面 其中一个原因是感觉不会造成什么大事故 还有就是前端比较负责 参数传递比较规范 但是作为开发还是要做好参数校验 减少问题的出现本文整理了一些常用的参数校验的方法 可能不是很全 但是也有一定的帮助手动校验注解校验验证器类和使用第三方库。每种方法都有自己的优点和适用场景。选择合适的参数校验方法取决于具体的需求和项目规模。无论采用何种方法,参数校验的目标始终是保证系统的安全性和可靠性。

weixin_44994494的博客 1459

机器学习---xgboost算法

问题上表现的十分顶尖,本节将较详细的介绍XGBoost的算法原理。成和剪枝分别对应了经验风险最小化和结构风险最小化, XGBoost的决策树生成是结构风险最小。式(1.1)称为经验风险最小化,训练得到的模型复杂度较高。出结果, 是模型的输出结果;等式右边第⼀部分是模型的训练误差,第⼆部分是正则化项,这里。其中,F是假设空间,假设空间是在已知属性和属性可能取值的情况下,对所有可能满足目标的情。最小化,结构风险最小化的模型往往对训练数据以及未知的测试数据都有较好的预测。的正则化项是K棵树的正则化项相加而来的。

weixin_43961909的博客 1万+

SAE J1850协议:从波形解析到汽车诊断实战

本文深入解析SAE J1850协议在汽车诊断中的应用,重点对比其PWM和VPW两种实现方式的波形特征、帧结构及诊断要点。通过实测案例,详细介绍了如何通过波形分析精准定位通用和福特等美系车型的通信故障,提升汽车电子诊断实战能力。

hill8的博客 965

spring boot后端参数校验

spring boot后端参数校验

shigen的博客 627

如何在 Windows 11 上安装 ChatGPT:CMD + 图形界面两种方式

我没说在 Windows 11 上装 ChatGPT 应用有多难,但你要是知道有哪几种官方途径可用,事情就会顺一点,尤其是对新手。对大多数用户来说,商店应用就是正确的选择。如果你在受管理的设备上,或者想避开商店,那么通过 Edge 或 Chrome 装 PWA 是完全站得住脚的替代方案。不管你选哪条路,真正的收获都是把 ChatGPT 从浏览器标签页里挪出来,放进一个它真正像个工具的地方。把它固定到任务栏、配好 Alt + 空格,你就会纳闷以前没它是怎么干活的。

山岚的运维笔记 299

后端思维篇:统一参数校验、异常处理、结果返回

https://mp.weixin.qq.com/s/D0zqBgBUPDjwnLIMiPh2Vw

竹林幽深 600

DNA pull-down技术避坑指南:从探针设计到质谱验证的完整实验方案

本文提供了一份详尽的DNA pull-down技术实战避坑指南,涵盖从探针设计、生物素标记、磁珠选择与预处理,到结合洗脱优化及下游质谱验证或Western Blot验证的全流程。重点解析了如何通过精细操作降低非特异性结合、提高实验特异性与重复性,并对比了质谱与WB两种验证路径的适用场景,旨在帮助研究者构建稳健可靠的DNA-蛋白质互作研究体系。

weixin_29274337的博客 495

AI办公Agent技术:文档与表格智能处理实践

办公自动化技术正从规则驱动转向语义理解,大语言模型(LLM)为办公Agent赋予了智能决策能力。这类系统通过五层架构整合自然语言处理、工具API调用和任务规划引擎,能自动完成文档分类、表格分析等高重复性工作。关键技术包括基于TF-IDF和BERT的特征提取、Excel公式自动生成等,在财务报告、法律审查等场景可实现90%以上的效率提升。随着多模态能力和领域专业化发展,办公Agent正在重塑企业文档处理流程,成为数字化转型的核心基础设施。

weixin_30263277的博客 520

java项目的前后端参数校验

数据校验

yuan__ll的博客 1972

QT编程系列1--QT学习前需知

本周学习了一些QT编程方面的知识,学写了几个程序,这里把记录下来。一方面对前面学习的知识做一个总结,便于以后复习、再学习和应用;另一方面也和大家做个交流,有不足的地方请各位看官多指点。   首先是做一些学习之前的交代:一,学习QT需要哪些基础;二,学习QT有哪些用途,QT较其他的开发工具有哪些特点;三,学习QT的思路。

霜月孤鸟&RTEMS&TinyOS 1115

java后端优雅进行参数校验

java后端优雅进行参数校验 利用注解的方式进行验证前端传入参数: public class UavAddDto { // import javax.validation.constraints.*; @NotNull(message = "姓名不允许为null") @NotEmpty(message = "姓名不允许为空,请检查后重新重新传入值") p...

itboy 5631

MicroCap声学仿真介绍(六)-入耳式耳机仿真

从上图可以看出,后腔开了泄声孔后,振膜的最大位移从4.8um提升到了10um,振膜位移增加了一倍。在实际应用中,一般耳机的前腔和后腔都需要开泄声孔,开孔的大小和调音网布的阻尼需要根据客户的要求以及仿真的结果进行权衡选择。接着在主界面放置电阻、电感、电容,电阻值为Rms,电感值为Mms,电容值为Cms,如下图。假设后腔泄声孔的直径为1.2mm,宽度为0.3mm,对应调音网的阻抗为5.5e8欧姆。假设前腔泄声孔的直径为1.2mm,宽度为0.3mm,对应调音网的阻抗为5.5e8欧姆。

山无忧的博客 1802

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring MVC后端参数校验

Spring MVC后端参数校验一、基本概念1.为什么要进行统一参数校验2. Spring的统一参数校验框架3. 统一参数校验是如何进行的4. @Validated 和 @Valid 的区别二、基本校验操作1. 简单参数校验2. 嵌套校验3. 分组校验4. 自定义校验5. 多属性交叉校验 一、基本概念 1.为什么要进行统一参数校验 一般为保证接口的安全性,后端接口需要对入参进行合法性校验,如所填参数是否为空、参数长度是否在规定范围内、手机号或邮箱是否为正确格式等,因此需要在业务代码中进行手动校验,但这种方式

qq_31124713的博客 1658

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

后端参数校验:通过正则表达式做参数校验

故事的开始: 前端进行校验,这个概念应该是没有问题的吧?比如:前端输入手机号的、链接的、邮箱地址的,我们是不是web端传入参数的时候,要对用户填入的格式进行校验。OK,这个概念大家都懂。但是,一般情况下,后端我们也要进行校验。 为什么?后端为什么校验? 我目前听到的两种说法:1、“客户端传来的参数都是不可信的”我大boss说的,具体原因不知道,就是说是行业的一种说法;2、“后端进行参数校验,...

monica1_1的博客 5348

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

后端请求参数校验

后端请求参数校验校验异常处理valid注解解释参考文章 校验异常处理 valid注解解释 空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格. @NotEmpty 检查约束元素是否为NULL或者是EMPTY. Booelan检查 @AssertTrue 验证 Boolean 对象是否为 true @AssertFalse 验证 Bool

远行的博客 664

后端对前端参数进行校验

link123link的博客 2134

spring boot后端controller中接收表单参数校验

校验分为两部分,一部分是前端的输入时就校验,一部分时后端接收参数时的校验。本文提到的是后端接收参数时的校验。这个后端校验的存在有什么意义呢?防止不合法的参数对系统造成影响。这里我们会说到正则表达式校验。① 导入validation坐标② 在参数上添加@Pattern注解③ 指定校验规则在Controller类上添加@Validated注解④ 在全局异常处理器中处理参数校验失败的异常希望以上内容能帮助到你^_^加油加油。

nameofworld的博客 1626

后端参数校验工具类

后端参数校验工具类 1、应用场景 1、Controller层判断传入参数是否符合规则,不符合规则直接返回错误状态码。 2、其他需要校验参数的地方。 2、工具类 public class CheckUtil { /** * 中文,字母,数字 _ - . 30位 */ static String regexFNDT = "^[a-zA-Z0-9\\u4e00-\\u9...

LitongZero的博客 1733

用hibernate-validator进行Java后端参数校验的使用说明

第一章 当前要解决的问题 最近在项目中,后端人员遇到了一个共同的问题,就是测试提出的大量的后端参数验证的问题。最容易想到的解决方案是用简单的if判断参数是否满足条件,比如参数不能为null,email必须符合email的格式。如果参数较少,这种方式还可以接受,但是如果需要校验的参数较多,手动进行if判断或者写正则表达式判断开发效率太慢,在时间、成本、质量的博弈中必然会落后。所以把校验层抽象出来...

qq_21419315的博客 1103

前端参数校验和后端参数校验

之前一直心存疑惑,对于同一表单的参数,是前端校验好还是后端。今天翻看了网上一些文章,发现这不是一个技术性问题,是我概念没弄清。先抛出结论: 前端校验是辅助,后端校验是核心。后端校验必不可少。 前端校验 前端校验主要是针对用户输入时,一些基础的错误进行提示,提升用户体验。比如:参数为空,密码邮箱的组合规则等。归根到底是对所有请求的一种过滤操作,如果前端都校验不通过当然就没必要请求后端了,这样可以减轻服务器负担。 但是:对于某些不走寻常路的用户,前端校验其实形同虚设。 后端校验 后端校验是针对整个系

B★R★S的博客 3352

好用的后端参数校验注解@Validated

在实际写项目的过程中,相信大家对一些表单字段的校验并不陌生,比如? 一个前端的登录注册表单,你可能需要对用户名密码的长度进行限制或者对邮箱以及手机号码进行正则校验等。 但是大家都知道,仅仅依靠前端进行参数的判断是绝对不行的,市面上的很多请求工具postman这些都是直接绕过前端发送请求的。

sunao1106的博客 2056
上一篇: java 类 方法 自定义说明注解
下一篇: 日志 精简版
新生代农民工-小王八
博客等级 码龄6年 128粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新生代农民工-小王八

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值