Java使用注解进行参数校验

news2024/10/10 17:30:08

在Java中,使用注解来校验请求参数通常与Spring框架结合使用,特别是当你使用Spring MVC或Spring Boot时。Spring提供了一套完整的校验机制,通过注解来实现参数的自动校验。

以下是一个使用注解进行参数校验的示例:

1. 添加依赖

首先,确保你的项目中包含了Spring Boot的校验依赖。如果你使用Maven,可以在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2. 创建校验类

定义一个类来作为校验规则的载体:

import javax.validation.constraints.Min;
import javax.validation.constraints.Max;

public class RangeConstraint {

    @Min(1)
    @Max(3)
    private int value;

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
}

3. 在Controller中使用校验

在你的控制器中,使用@Valid@Validated注解来触发校验:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;

@RestController
public class ParameterController {

    @GetMapping("/checkParam")
    public String checkParameter(@Valid RangeConstraint rangeConstraint) {
        return "Parameter is valid: " + rangeConstraint.getValue();
    }
}

4. 处理校验错误

你可以使用@ExceptionHandler来处理校验异常:

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.http.HttpStatus;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handleValidationExceptions(MethodArgumentNotValidException ex) {
        StringBuilder errors = new StringBuilder();
        for (FieldError fieldError : ex.getBindingResult().getFieldErrors()) {
            errors.append(fieldError.getField()).append(": ").append(fieldError.getDefaultMessage()).append("; ");
        }
        return errors.toString();
    }
}

5. 测试

启动你的Spring Boot应用程序,然后向/checkParam端点发送请求,例如:

GET /checkParam?value=0

如果参数值不在1和3之间,你将收到一个400 Bad Request响应,包含校验错误信息。

注意事项

  • 使用@Valid@Validated注解可以触发校验机制。
  • @Min@Max注解用于指定数值的范围。
  • MethodArgumentNotValidException是Spring在参数校验失败时抛出的异常。
  • @RestControllerAdvice@ExceptionHandler用于全局异常处理。

通过这种方式,你可以轻松地为你的应用程序添加参数校验逻辑,确保接收到的数据符合预期的规则。

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

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

相关文章

kafka快速入门系统学习示例

1.主要名词 Broker&#xff1a;消息中间件处理节点&#xff0c;⼀个Kafka节点就是⼀个broker&#xff0c;⼀个或者多个 Broker可以组成⼀个Kafka集群。 partition&#xff1a;通过partition将⼀个topic中的消息分区来存储。这样的好处有多个&#xff1a;分区存储&#xff0…

ArgoWorkflow教程(六)---无缝实现步骤间参数传递

之前我们分析了&#xff0c;Workflow、WorkflowTemplate 、template 3 者之间如何传递参数。 本文主要分析同一个 Workflow 中的不同 step 之间实现参数传递&#xff0c;比如将上一个步骤的输出作为下一个步骤的结果进行使用&#xff08;而非以文件方式传递&#xff09;。 1. …

引领零售未来:年销售额500亿的运动品牌如何实现多渠道会员管理?

通过技术创新和全渠道整合&#xff0c;提升运动品牌影响力、用户粘性和市场竞争力。 运动热情高涨持续释放消费潜力&#xff0c;全球知名运动品牌2024财年营收超500亿美元&#xff0c;保持七个季度连续增长。 而随着电商的崛起和消费习惯的变化&#xff0c;会员数量激增且分布…

Android实现ViewPager剧中放大效果

效果图 实现方式核心思想是自定义PageTransformer继承ViewPager.PageTransformer&#xff0c;精确控制每一个page的动效。 PageTransformer的transformPage方法并不会区分当前的page是哪一个&#xff0c;所以需要我们自己去识别&#xff0c;我的方法是每个page添加一个text显…

Nuxt.js 应用中的 page:transition:finish 钩子详解

title: Nuxt.js 应用中的 page:transition:finish 钩子详解 date: 2024/10/10 updated: 2024/10/10 author: cmdragon excerpt: page:transition:finish 是 Nuxt.js 中的一个事件钩子,专门用于处理页面过渡效果结束后的逻辑。这一钩子在页面过渡的 onAfterLeave 事件之后…

qt+opengl 实现纹理贴图,平移旋转,绘制三角形,方形

1 首先qt 已经封装了opengl&#xff0c;那么我们就可以直接用了&#xff0c;这里面有三个函数需要继承 virtual void initializeGL() override; virtual void resizeGL(int w,int h) override; virtual void paintGL() override; 这三个函数是实现opengl的重要函数。 2 我们…

【NLP自然语言处理】03 - 使用Anaconda创建新的环境/pycharm切换环境

NLP基础阶段&#xff1a;创建新的虚拟环境 第一步&#xff1a;查看有多少个虚拟环境 conda env list 第二步&#xff1a;创建一个新的虚拟环境&#xff0c;起个名字&#xff1a;nlpbase 打开anconda prompt终端&#xff0c;输入命令: conda create -n nlpbase python3.10 第三步…

基于xml配置文件的Spring事务

在项目中对事务属性通常传播属性&#xff0c;回滚属性&#xff0c;隔离级别&#xff0c;超时属性都取默认值&#xff0c;只有只读属性会如下的配置&#xff1a; 什么意思&#xff1a;Service层你的类里的方法&#xff0c;以get&#xff0c;find&#xff0c;select等开头的方法是…

如何进行数据中心负载测试的自动化?

数据中心负载测试的自动化是一种通过使用软件工具和脚本来模拟大量用户访问数据中心的过程&#xff0c;以评估其性能、稳定性和可扩展性的方法。以下是进行数据中心负载测试自动化的一些建议&#xff1a; 市场上有许多负载测试工具可供选择&#xff0c;如LoadRunner、JMeter、…

【图论】(二)图论基础与路径问题

图论基础与路径问题 图的构造邻接矩阵邻接表 所有可达路径邻接矩阵存储邻接表存储 字符串接龙有向图的完全可达性 图的构造 这里仅对图论路径问题中图的构造做整理总结归纳&#xff0c;具体详细相关概念请参考代码随想录上的整理总结&#xff1a; 图论理论基础深度优先搜索理…

C语言函数栈帧的创建与销毁(32)

文章目录 前言一、什么是函数栈帧&#xff1f;二、理解函数栈帧能解决什么问题&#xff1f;三、函数栈帧的创建和销毁解析什么是栈&#xff1f;认识相关寄存器和汇编指令 四、解析函数栈帧的创建和销毁预备知识函数的调用堆栈准备环境转到反汇编函数栈帧的创建函数栈帧的销毁 五…

采用反相正基准电压电路的反相运算放大器

1 简介 本设计使用采用反相正基准电压的反相放大器将 –5V 至 –1V 的输入信号转换为 3.3V 至 0.05V 的输出电压。该电路可用于将传感器负输出电压转换为可用的 ADC 输入电压范围。 2 设计目标 2.1 输入 2.2 输出 2.3 电源 3 电路设计 根据设计目标&#xff0c;最终设计的电…

2.1类和对象(上)

本篇博客来梳理类和对象的基础知识 一、类的定义 1&#xff0e;类定义格式 &#xff08;1&#xff09;关键字&#xff1a;class。类中的变量称为类的属性/成员变量&#xff0c;类中的函数称为类的方法/成员函数 &#xff08;2&#xff09;为区分成员变量&#xff0c;一般会加…

MES管理系统对中小企业有哪些帮助

MES管理系统解决方案对中小企业具有显著的帮助&#xff0c;主要体现在以下几个方面&#xff1a; 一、提升生产效率 MES管理系统能够实时监控生产过程&#xff0c;提供准确的生产数据和及时的反馈。这种实时监控与数据分析能力&#xff0c;使中小企业能够精准把握生产脉搏&…

如何应对动态图片大小变化?Python解决网页图片截图难题

背景介绍 随着互联网的发展&#xff0c;许多网站&#xff0c;尤其是电商平台&#xff0c;如京东&#xff08;JD.com&#xff09;&#xff0c;为了提升用户体验&#xff0c;采用了许多动态内容加载技术。当我们使用爬虫获取商品图片时&#xff0c;往往会遇到一些棘手问题&#…

中科星图GVE(案例)——AI提取指定采样区域的建筑物范围

目录 简介 函数 gve.Image.fromGeometry(geometry,source,options) gve.Services.AI.buildingExtraction(fromGridRes) 代码 结果 ​编辑 知识星球 机器学习 简介 要提取指定采样区域的建筑物范围&#xff0c;可以使用遥感图像处理和计算机视觉技术。以下是一种可能的…

软考攻略/超详细/系统集成项目管理工程师/基础知识分享14

5.4 软件实现 5.4.1 软件配置管理&#xff08;掌握&#xff09; 软件配置管理&#xff08;SCM&#xff09;是一种标识、组织和控制修改的技术。软件配置管理应用于整个软件工程过程。 SCM活动的目标就是标识变更、控制变更、确保变更正确 SCM的目的是使错误降为最小&#xff0…

申报审批|基于springBoot的入校申报审批系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出…

数据库中间件 -- MyCat

1、什么是数据库中间件 数据库中间件(Database Middleware)是一种位于应用程序与数据库管理系统(DBMS)之间的软件层。它的主要目的是为应用程序提供更加高效、可靠和透明的数据库访问,同时解决多种数据库管理问题。 The domain name Mycat.io is for sale 1.1、常见的数…

新质生产力在制造业中的“新”主要体现在哪

新质生产力&#xff0c;以其独特的技术创新、模式变革和思维升级&#xff0c;正逐步重塑制造业的面貌&#xff0c;引领其走向更加智能化、绿色化和高效化的未来。 一、技术创新&#xff1a;驱动产业升级的核心引擎 新质生产力在制造业中的首要“新”&#xff0c;体现在技术创新…