Spring Boot 参数校验全局处理(JSR380 + 自定义校验)

springboot中参数校验 在Spring Boot中,可通过 JSR 380规范注解(如@DecimalMin、@DecimalMax)结合 自定义注解 实现BigDecimal类型字段的大小校验。@Digits是JSR 380规范中的校验注解,用于限制数字类型(如BigDecimal、Integer、String)的整数位和小数位长度。需求:年龄字段(Integer)必须为整数,且整数位≤3(如99合法,1000或18.5非法)。适用场景:需自定义校验规则(如值必须为正数、非零,或动态范围)。 阅读详情

Spring Boot 参数校验全局处理(JSR380 + 自定义校验)

在Spring Boot接口开发中,前端传参的合法性校验是必不可少的环节。此前我们已经实现了接口开发与全局异常处理的基础框架,而在实际开发中,若直接在接口方法中通过大量if-else判断参数是否合法,不仅会导致代码冗余、可读性差,还会增加后期维护成本。本文将专门讲解如何借助JSR380规范注解 + 全局异常捕获,配合自定义校验注解,实现前端传参的优雅校验,彻底摒弃繁琐的if-else判断,让参数校验逻辑更简洁、更规范、更可复用。

JSR380是Java EE的参数校验规范,定义了一系列用于参数校验的注解,Spring Boot已默认集成相关实现(hibernate-validator),无需额外引入过多依赖,即可直接使用注解完成基础的参数校验;对于一些特殊场景(如手机号格式、身份证号校验等),JSR380默认注解无法满足需求,此时可通过自定义校验注解实现个性化校验,再结合全局异常捕获,统一处理所有参数校验失败的异常,实现校验逻辑与业务逻辑的解耦。

一、基础准备:引入依赖(极简配置)

Spring Boot 2.3及以上版本,已默认集成hibernate-validator(JSR380的实现),若项目为低版本,需手动引入以下依赖,确保注解能够正常生效。依赖配置简洁,无需额外配置其他参数,引入后即可直接使用JSR380相关校验注解。

<!-- JSR380 参数校验核心依赖(低版本Spring Boot需手动引入) -->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.2.5.Final</version>
</dependency>
<!-- 可选:validation-api 规范依赖(确保注解识别) -->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
</dependency>

注意:高版本Spring Boot(2.3+)无需手动引入上述依赖,启动项目后即可直接使用@NotNull、@NotBlank等校验注解;若引入后出现依赖冲突,可排除项目中重复的validation相关依赖,确保依赖版本统一。

二、JSR380 核心注解用法(基础校验,摒弃if-else)

JSR380提供了一系列常用的校验注解,可直接作用于实体类的字段上,也可直接作用于接口方法的参数上,用于校验参数的合法性(如非空、长度、格式等)。使用时只需在需要校验的字段/参数上添加对应注解,并指定校验失败的提示信息,即可完成基础的参数校验,无需编写任何if-else判断。

以下是开发中最常用的JSR380注解,结合实体类案例详细说明用法,所有注解均支持自定义校验失败提示信息,提升接口返回的友好性。

2.1 常用核心注解说明

  • @NotNull:校验参数不能为null,适用于所有类型(包括基本类型、引用类型),注意:基本类型(如int、long)本身不能为null,因此该注解更适用于引用类型(如String、Integer)。

  • @NotBlank:校验字符串不能为null、不能为空字符串(“”)、不能全为空格,仅适用于String类型,是开发中字符串非空校验的首选注解。

  • @NotEmpty:校验集合、数组、字符串不能为null,且长度不能为0;与@NotBlank的区别是,@NotEmpty允许字符串为空格(如" "),仅适用于集合、数组、String类型。

  • @Size:校验集合、数组、字符串的长度,可指定min(最小长度)和max(最大长度),超出范围则校验失败。

  • @Min:校验数字(int、long、BigDecimal等)的最小值,小于该值则校验失败。

  • @Max:校验数字的最大值,大于该值则校验失败。

  • @Email:校验字符串是否符合邮箱格式,默认校验规则较为宽松,可通过regexp属性自定义邮箱格式正则。

  • @Pattern:校验字符串是否符合指定的正则表达式,适用于自定义格式校验(如手机号、身份证号等,若无需复用,可直接用该注解替代自定义校验注解)。

2.2 实体类中使用案例(最常用场景)

在接口开发中,前端传参通常会封装为实体类(如用户注册、登录参数),将校验注解作用于实体类字段,配合@Valid注解触发校验,即可完成参数合法性校验,彻底摒弃if-else。

// 示例:用户注册参数实体类(所有注解均无导包,直接复制可用)
@Data
public class UserRegisterDTO {
    // 用户名:非空、长度2-20位
    @NotBlank(message = "用户名不能为空")
    @Size(min = 2, max = 20, message = "用户名长度必须在2-20位之间")
    private String username;

    // 密码:非空、长度6-16位
    @NotBlank(message = "密码不能为空")
    @Size(min = 6, max = 16, message = "密码长度必须在6-16位之间")
    private String password;

    // 邮箱:非空、符合邮箱格式
    @NotBlank(message = "邮箱不能为空")
    @Email(message = "邮箱格式不正确")
    private String email;

    // 年龄:非空、18-60岁之间
    @NotNull(message = "年龄不能为空")
    @Min(value = 18, message = "年龄不能小于18岁")
    @Max(value = 60, message = "年龄不能大于60岁")
    private Integer age;

    // 手机号:非空、符合手机号正则(此处用@Pattern临时实现,后续用自定义注解优化)
    @NotBlank(message = "手机号不能为空")
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
    private String phone;
}

2.3 接口中触发校验

在接口方法的实体类参数前添加**@Valid**注解(或@Validated),即可触发该实体类的参数校验;若参数校验失败,会抛出MethodArgumentNotValidException异常(请求体参数校验失败)或ConstraintViolationException异常(路径参数、请求参数校验失败),后续通过全局异常捕获统一处理这些异常,返回友好的提示信息。

// 示例:用户注册接口(触发参数校验)
@RestController
@RequestMapping("/user")
public class UserController {

    // 注册接口:@Valid 触发UserRegisterDTO的参数校验
    @PostMapping("/register")
    public Result<Void> register(@Valid @RequestBody UserRegisterDTO registerDTO) {
        // 校验通过后,执行注册业务逻辑(无需任何if-else判断参数)
        // 业务逻辑...
        return Result.success("注册成功");
    }

    // 示例:路径参数校验(直接作用于参数上)
    @GetMapping("/{id}")
    public Result<User> getUserById(@PathVariable @NotNull(message = "用户ID不能为空") Long id) {
        // 校验通过,执行查询逻辑
        // 业务逻辑...
        return Result.success(null);
    }
}

注意:@Valid和@Validated的区别:@Valid是JSR380规范提供的注解,支持嵌套校验(如实体类中包含另一个实体类字段,需校验该嵌套字段时使用);@Validated是Spring提供的注解,支持分组校验,可根据不同场景(如新增、修改)执行不同的校验规则,两者均可触发参数校验,开发中可根据需求选择。

三、全局异常捕获:统一处理参数校验错误

当参数校验失败时,Spring Boot会抛出对应的异常(请求体参数校验失败抛出MethodArgumentNotValidException,路径参数/请求参数校验失败抛出ConstraintViolationException),若不进行处理,接口会返回默认的错误信息,不够友好且不符合项目统一的响应格式。

结合前文实现的全局异常处理框架,我们只需新增对这两种异常的捕获,提取校验失败的提示信息,封装为统一的响应格式(如Result对象),即可实现参数校验错误的统一处理,无需在每个接口中单独处理校验失败的情况,进一步简化代码。

3.1 全局异常处理器新增校验异常捕获

在全局异常处理器(GlobalExceptionHandler)中,新增两个异常处理方法,分别捕获MethodArgumentNotValidException和ConstraintViolationException,提取校验失败的提示信息,返回统一的失败响应。

// 全局异常处理器:新增参数校验异常捕获(无导包,直接复制可用)
@RestControllerAdvice
public class GlobalExceptionHandler {

    // 统一响应格式(前文已实现,此处复用)
    @Data
    public static class Result<T> {
        private Integer code;
        private String message;
        private T data;

        public static <T> Result<T> success(T data) { /* 实现省略 */ }
        public static <T> Result<T> fail(Integer code, String message) { /* 实现省略 */ }
    }

    // 1. 捕获请求体参数校验失败异常(@RequestBody + @Valid)
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result<Void> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        // 提取校验失败的第一条提示信息(也可提取所有提示信息,根据需求调整)
        String errorMsg = e.getBindingResult().getFieldErrors().get(0).getDefaultMessage();
        // 返回统一失败响应(状态码400:参数错误)
        return Result.fail(400, errorMsg);
    }

    // 2. 捕获路径参数/请求参数校验失败异常(@PathVariable/@RequestParam + 校验注解)
    @ExceptionHandler(ConstraintViolationException.class)
    public Result<Void> handleConstraintViolationException(ConstraintViolationException e) {
        // 提取校验失败的第一条提示信息
        String errorMsg = e.getConstraintViolations().iterator().next().getMessage();
        // 返回统一失败响应
        return Result.fail(400, errorMsg);
    }

    // 其他异常处理方法(前文已实现,此处省略)
    @ExceptionHandler(Exception.class)
    public Result<Void> handleException(Exception e) { /* 实现省略 */ }
}

3.2 校验效果演示

当前端传参不符合校验规则时,接口会直接返回统一的失败响应,无需手动处理,示例如下:

  • 场景1:用户名为空 → 响应:{“code”:400,“message”:“用户名不能为空”,“data”:null}

  • 场景2:密码长度为3位 → 响应:{“code”:400,“message”:“密码长度必须在6-16位之间”,“data”:null}

  • 场景3:手机号格式错误(如12345678901) → 响应:{“code”:400,“message”:“手机号格式不正确”,“data”:null}

通过这种方式,不仅统一了参数校验失败的响应格式,还彻底摒弃了接口中的if-else判断,让代码更简洁、更优雅,同时提升了接口的友好性和可维护性。

四、自定义校验注解:满足特殊场景需求

JSR380提供的默认注解,只能满足基础的参数校验场景,而在实际开发中,经常会遇到一些特殊的校验需求(如手机号格式、身份证号、邮政编码等),此时@Pattern注解虽然可以实现,但正则表达式分散在各个字段上,无法复用,且代码可读性差。

通过自定义校验注解,可将特殊的校验逻辑封装起来,实现校验逻辑的复用,同时让代码更简洁、更规范。下面以“手机号格式校验”为例,详细讲解自定义校验注解的实现步骤,其他特殊场景可参考此步骤仿写。

4.1 步骤1:自定义校验注解(@Phone)

自定义校验注解需添加JSR380规范的相关元注解(@Target、@Retention、@Constraint),指定注解的作用范围、保留策略,以及关联的校验器(Validator),同时定义校验失败的提示信息(可自定义)。

// 自定义手机号校验注解(@Phone)
@Target({ElementType.FIELD, ElementType.PARAMETER}) // 注解作用范围:字段、参数
@Retention(RetentionPolicy.RUNTIME) // 保留策略:运行时生效
@Constraint(validatedBy = PhoneValidator.class) // 关联校验器(核心,实现校验逻辑)
public @interface Phone {

    // 校验失败提示信息(默认值,可自定义)
    String message() default "手机号格式不正确";

    // 分组校验(默认分组,可根据需求扩展)
    Class<?>[] groups() default {};

    // 负载(默认,无需修改)
    Class<? extends Payload>[] payload() default {};
}

4.2 步骤2:实现校验器(PhoneValidator)

校验器需实现ConstraintValidator接口,重写initialize(初始化)和isValid(校验逻辑)两个方法,其中isValid方法是核心,用于实现具体的校验逻辑(如手机号正则匹配),校验通过返回true,校验失败返回false。

// 手机号校验器(与@Phone注解关联,实现校验逻辑)
public class PhoneValidator implements ConstraintValidator<Phone, String> {

    // 手机号正则表达式(标准手机号格式:13-19开头,共11位)
    private static final String PHONE_REGEX = "^1[3-9]\\d{9}$";

    /**
     * 初始化方法(可选,用于获取注解中的参数,此处无需使用)
     */
    @Override
    public void initialize(Phone constraintAnnotation) {
        ConstraintValidator.super.initialize(constraintAnnotation);
    }

    /**
     * 核心校验逻辑
     * @param value 待校验的参数(手机号字符串)
     * @param context 校验上下文(无需修改)
     * @return true:校验通过,false:校验失败
     */
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // 校验逻辑:非空判断 + 正则匹配
        if (value == null || value.isEmpty()) {
            // 若需要校验手机号非空,可在此处返回false;若允许为空,返回true(结合@NotBlank使用)
            return false;
        }
        // 正则匹配手机号格式
        return value.matches(PHONE_REGEX);
    }
}

4.3 步骤3:使用自定义校验注解

自定义注解实现完成后,使用方式与JSR380默认注解完全一致,直接作用于实体类字段或接口参数上,配合@Valid注解触发校验,校验失败后会被全局异常处理器捕获,返回自定义的提示信息。

// 示例:修改UserRegisterDTO,使用@Phone注解替代@Pattern
@Data
public class UserRegisterDTO {
    // 其他字段不变...

    // 手机号:使用自定义@Phone注解,替代原来的@Pattern,可复用
    @NotBlank(message = "手机号不能为空")
    @Phone(message = "手机号格式不正确(请输入13-19开头的11位手机号)")
    private String phone;
}

注意:自定义校验注解可灵活扩展,若需要校验身份证号、邮政编码等,只需复制上述步骤,修改注解名称、正则表达式和校验逻辑即可;若校验逻辑复杂(如校验手机号是否已被注册),可在isValid方法中注入Service,调用业务逻辑实现校验(需添加@Component注解,让校验器被Spring管理)。

五、进阶优化:分组校验(可选,提升灵活性)

在实际开发中,同一个实体类可能会用于不同的接口场景(如新增用户和修改用户),不同场景的参数校验规则可能不同(如新增用户需要校验用户名非空,修改用户可允许用户名不变)。此时可通过分组校验,实现不同场景下的差异化校验,进一步提升参数校验的灵活性。

分组校验的核心是定义分组接口(空接口,无需实现任何方法),在校验注解中指定分组,在接口中通过@Validated指定需要执行的分组,即可实现差异化校验。示例如下:

// 1. 定义分组接口(空接口,用于区分不同场景)
public interface AddGroup {} // 新增场景分组
public interface UpdateGroup {} // 修改场景分组

// 2. 实体类中指定注解的分组
@Data
public class UserDTO {
    // 新增时校验非空,修改时无需校验(id由前端传入,无需校验)
    @NotNull(message = "用户ID不能为空", groups = AddGroup.class)
    private Long id;

    // 新增和修改时都需要校验非空和长度
    @NotBlank(message = "用户名不能为空", groups = {AddGroup.class, UpdateGroup.class})
    @Size(min = 2, max = 20, message = "用户名长度必须在2-20位之间", groups = {AddGroup.class, UpdateGroup.class})
    private String username;
}

// 3. 接口中指定分组,触发对应分组的校验
@RestController
@RequestMapping("/user")
public class UserController {
    // 新增用户:仅执行AddGroup分组的校验
    @PostMapping("/add")
    public Result<Void> add(@Validated(AddGroup.class) @RequestBody UserDTO userDTO) {
        // 业务逻辑...
        return Result.success();
    }

    // 修改用户:仅执行UpdateGroup分组的校验
    @PutMapping("/update")
    public Result<Void> update(@Validated(UpdateGroup.class) @RequestBody UserDTO userDTO) {
        // 业务逻辑...
        return Result.success();
    }
}

六、总结

本文通过JSR380规范注解、全局异常捕获、自定义校验注解三个核心环节,实现了Spring Boot前端传参的优雅校验,彻底摒弃了繁琐的if-else判断,让参数校验逻辑更简洁、更规范、更可复用。

核心要点总结:1. 基础校验使用JSR380默认注解(@NotBlank、@Size等),配合@Valid触发校验;2. 全局异常捕获校验失败异常,统一返回响应格式;3. 特殊场景使用自定义校验注解,实现校验逻辑复用;4. 复杂场景可通过分组校验,实现差异化校验需求。

通过这种方式,不仅提升了代码的可读性和可维护性,还降低了后期的维护成本,同时让接口返回的提示信息更友好,符合企业级开发的规范,是Spring Boot接口开发中参数校验的最优实践之一。

Spring Boot接口校验的“量子校验引擎”:从参数黑洞到零缺陷的熵减方程式 / 自定义注解定义(关键代码)String message() default "无效的信用卡号";Class<?Class<?// 自定义校验器实现(关键代码)@Override// Luhn算法校验信用卡号i >= 0;// 处理进位sum += n;alternate;// 使用示例@ValidCreditCard(message = "信用卡号无效")// 省略其他字段// 错误示例:未注册自定义校验器。 阅读详情

相关推荐

vavr-beanvalidation2:用于vavr的Bean验证模块-与任何JSR380提供程序集成

Vavr-Beanvalidation 2.0 此模块提供对bean验证2.0(JSR380)的支持。 可以与bean验证规范的任何服务提供者一起使用,例如org.hibernate.validator:hibernate-validator 添加了验证: @Size的Traversable<T> @Size @NotEmpty表示vavr的Value<T> 所有可用的验证都可以应用于嵌套的元组值。 见下面的例子 使用模块 将依赖项添加到您的类路径中。 对于行家: < dependency> < groupId>io.vavr</ groupId> < artifactId>vavr-beanvalidation2</ artifactId> < version>0.9.2</ version> </ dependency> 为了使bea

Spring Boot使用JSR-380进行校验

JSR-380是J2EE的一个规范,用于校验实体属性,它是JSR-303的升级版,在SpringBoot中可以基于它优雅实现参数校验。框架校验失败之后会抛出异常,需要捕获这个异常然后来自定义校验不通过的错误响应,这里直接贴代码,兼容、、//@RequestBody参数校验}else{//@ModelAttribute参数校验}}//@RequestParam参数校验}else{//这个不是JSR标准返回的异常,要自定义提示文本不能为空是框架内置的。...

老男孩的架构路 943

hibernate-validator, Hibernate验证器Bean验证 2.0 ( JSR 380 ) 参考实现.zip

hibernate-validator, Hibernate验证器Bean验证 2.0 ( JSR 380 ) 参考实现 Hibernate 验证器版本:6.0.2. Final - 22-08-2017是什么?这是 JSR-380 Bean验证 2.0的参考实现。 Bean验证定义了JavaBean的元数据模型和API以及方法验证。 默认元数据源是注

JSR380(Bean Validation 2.0)

1、新的变化 支持验证容器元素 集合类型的级联验证。 支持java.util.Optional 支持JavaFX的属性类型 支持自定义容器类型 支持新的日期/时间类型 新的内置约束:@Email, @NotEmpty, @NotBlank, @Positive, @PositiveOrZero, @Negative, @NegativeOrZero, @PastOrPresent, @FutureOrPresent 所有内置约束现在都标记为可重复 通过反向获取参数名字 Constrain.

多看多听多总结 806

西瓜书第二章——模型评估与选择(十折交叉验证/查准查全F1)

第二章——模型评估与选择

xsddys的博客 952

JSR380验证框架

validat @NotNull 论证注解的属性值不是空的。 @AssertTrue 验证注解的属性值是否为真。 @Size 验证注解的属性值的大小介于属性min和max之间;可应用于string,collection,map和数组属性。 @Min 验证注解属性的值不小于值属性的值 @Max 验证被注解的属性的值不大于值属性的值 @Email 验证注解的属性是一个有效的电子邮件地址。 @Pattern 验证注解的属性是否匹配正则表达式 @NotEmpty 验证属性不是空或空;可以应用于stri

m0_46561911的博客 1348

calibre QRC提取寄生参数

typical将上面的文件QCI_flow里面的文件 在Cp 到当前 ,其实应该是某几个文件,但是我给忘记了 就全cp过来了 ,无影响,不过也希望大佬指正。

2202_75711937的博客 1515

java bean 验证——JSR 380

java bean 验证——JSR 380 概述 本文快速浏览下java bean验证的基础知识,使用jsr380标准框架,也就是Bean validation2.0 。 验证用户输入,在大多数应用中是最常用的需求,java bean 验证框架已经称为处理这方面逻辑的实时标准。 JSR 380 JSR 380规范是bean验证的java api规范,javaEE和javaSE的一部分...

neweastsun的专栏 5342

XDMA Scatter-Gather(SG)模式

XDMA Scatter-Gather(SG)模式 是 Xilinx FPGA 中用于高效处理 ​非连续内存数据 的 DMA 传输机制,通过 ​描述符链表(Descriptor List)​ 管理多块分散数据,显著减少 CPU 开销并提升吞吐量。

浩瀚之水的专栏 2125

基于深度学习的航拍图像中地物变化检测

随着无人机技术的飞速发展,航拍图像成为获取地表信息的重要手段之一。然而,由于地球表面的不断变化,监测和识别航拍图像中的地物变化成为一项具有挑战性的任务。在人工智能领域,深度学习技术的兴起为地物变化检测提供了全新的解决方案。本文将介绍基于深度学习的航拍图像中地物变化检测的方法,并附上相应的代码实例。

一键难忘的博客 4174

Java Bean Validation规范

约束是一系列约束注解与约束校验实现的组合。约束注解可以应用在types, fields, methods,constructors, parameters, container elements 或其他约束注解。Bean校验API的默认包名为。在指定一个注解应用于Java Bean的同时,需要指定属性,这些属性映射为注解元素。messagegroups和payload,为保留名称,注解元素命名不能以valid开头,constraint 可以使用其他元素名称作为其属性。

demon7552003的小本本 1551

基于simulink创建一个针对双馈异步风力发电机并网运行的仿真模型

摘要:本文详细介绍了基于Simulink的双馈异步风力发电机(DFIG)并网运行仿真建模方法。系统包含风速输入、风力机、双馈发电机、电力电子变换器、控制器和并网接口等模块,通过8个步骤完整呈现了建模流程,包括风速模拟、机械功率计算、发电机特性建模、变流器控制策略设计等关键环节。仿真可评估系统在不同风速条件下的动态响应、最大功率跟踪能力和发电效率,为风力发电系统的优化设计提供有效验证手段。模型可根据实际需求扩展环境因素和电网交互等细节,提高仿真精度。

amy_mhd的博客 333

spring boot中@Validated

在 Spring Boot 中,@Validated 是用于触发参数校验的注解,通常与 ​​JSR-303/JSR-380​​(Bean Validation)提供的校验注解一起使用。

qq_38923350的博客 1366

物流分拣YOLO实战:YOLO26 OBB+YOLOv8多尺度融合,不规则包裹分拣效率提升40%(附训练+部署代码)

在物流分拣的工业场景中,模型的检测精度、推理速度、部署友好性本次基于YOLO26 OBB+YOLOv8多尺度融合打造的物流分拣视觉检测方案,精准解决了工业场景中不规则包裹的旋转检测、多尺度包裹的漏检问题,最终实现分拣效率提升40%,检测准确率提升至95%以上,且模型在边缘设备上的推理帧率稳定35FPS+,完全适配物流分拣的工业落地需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 881

【蓝桥杯单片机组第八届省赛】— 基于单片机的电子钟程序设计与调试

1、初赛试题 1.1 基本要求 (1)使用 CT107D 单片机竞赛板, 完成“电子钟” 功能的程序设计与调试; (2)设计与调试过程中,可参考组委会提供的“资源数据包”; (3)Keil 工程文件以准考证号命名, 完成设计后, 提交完整、 可编译的 Keil工程文件到服务器。 1.2 硬件框图 1.3功能描述 1.3.1 初始化 (1)关闭蜂鸣器、继电器等无关外...

Fanjufei的博客 3661

Spring Boot - 参数校验:分组校验、自定义注解、嵌套对象全解析

Spring Boot - 参数校验:分组校验、自定义注解、嵌套对象全解析

weixin_46619605的博客 1277

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring Boot 实战:一站式搞定接口统一返回 + 全局异常处理 + 参数校验,告别重复编码!

作为 Java 后端开发者,你是否每天都在重复做这些工作?每个接口手动拼接返回格式,一会返回Map,一会返回自定义对象,前端对接直呼崩溃;接口里充斥着大量try-catch,代码臃肿不堪,异常处理杂乱无章;对接口参数做校验时,写一堆if-else判断,比如 “用户名不能为空”“手机号格式不正确”,冗余代码占了半屏;如果你正被这些问题困扰,那这篇博客绝对能帮你彻底解决!本文将基于 Spring Boot 实现接口统一返回结果封装 + 全局异常处理 + 优雅参数校验。

2301_78440479的博客 913

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Spring Boot 参数校验神器

当内置注解无法满足需求时,可创建自定义注解。例如校验用户名唯一性:步骤:定义注解 @UniqueUsername实现校验器 UniqueUsernameValidator// 自定义注解String message() default "用户名已存在";// 校验器@Override// 调用数据库或缓存验证唯一性return!// 示例逻辑校验用户名是否重复。@Validated 不仅简化了参数校验逻辑,还通过分组、嵌套校验和自定义注解提供了强大的扩展性。

kuang_wu的专栏 452

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Spring Boot接口校验注解@Valid系列详解:原理与实战

String message() default "手机号格式错误";Class<?Class<?@Override@Phone创建user.name.notblank=用户名不能为空!email.invalid=邮箱格式不正确!Spring Boot的校验机制通过简洁的注解极大提升了开发效率。掌握其原理和高级用法,能够有效保证接口安全性。建议在实际项目中结合全局异常处理,返回结构化的错误信息。

weixin_42593797的博客 1526

Spring Boot参数校验全攻略,深入掌握 FluentMigrator:C#.NET 数据库迁移框架详解。

1. 实现注解与校验器String message() default "手机号格式错误";Class<?Class<?@Override2. 使用自定义注解。

2501_93989269的博客 448

Spring Boot Web 开发三部曲:参数校验、全局异常与统一响应

String message() default "密码必须包含大小写字母和数字,长度8-20位";Class<?Class<?@Override// 密码规则:至少一个大写字母、一个小写字母、一个数字=.*[a-z])(?=.*[A-Z])(?// 具体业务异常super(40401, "用户不存在");通过实现 Spring Boot Web 开发的「参数校验、全局异常、统一响应」三部曲,我们能够构建出更加健壮、规范、易维护的 Web 应用。参数校验。

2508_93397196的博客 166

JavaWeb27-Spring Boot:接口参数校验(JSR-380 注解与自定义校验)

摘要 Spring Boot 集成 JSR-380 规范,通过注解实现声明式参数校验,大幅提升开发效率与系统健壮性。本文系统讲解: 基础校验:@NotBlank、@Size等内置注解应用 嵌套校验:@Valid注解处理复杂对象层级 分组校验:@Validated实现不同场景的校验规则 自定义校验:开发业务特定的验证逻辑 全局异常处理:统一返回格式的错误响应 包含完整代码示例,帮助开发者构建安全的API接口,替代冗余的if-else校验逻辑,实现业务逻辑与参数校验的有效解耦。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

基于Spring Validation注解校验用户提交的霸王餐申请参数合法性

在“吃喝不愁”App中,用户提交霸王餐申请时需填写手机号、门店ID、用餐人数、期望到店时间等关键信息。若未对前端传参做严格校验,将导致业务异常、数据污染甚至安全漏洞。模块,结合 JSR-380(Bean Validation 2.0)标准注解,实现声明式、可复用、高可读性的参数校验机制。注意:若 Validator 中需注入 Spring Bean,必须标注。Spring Boot 2.3+ 需显式引入,早期版本已默认包含。若参数非法,Spring MVC 将自动抛出。,且确保其被 Spring 管理。

357

Spring Boot 接口开发实战:RESTful 规范、参数校验与全局异常处理

本文基于SpringBoot2.7.x,系统讲解了RESTful接口开发的全流程解决方案。首先明确了接口设计的核心目标:规范性、健壮性、可维护性和安全性。详细阐述了RESTful规范的设计要点,包括URL命名、HTTP方法语义和响应格式。通过实战演示了统一响应体封装、JSR-380参数校验、全局异常处理等关键技术实现,并介绍了Knife4j自动生成接口文档的方法。文章还提供了接口安全优化建议和常见问题的避坑指南,最终形成了一套"规范统一、校验简洁、异常可控、文档自洽"的生产级接口开发体系

2503_94434664的博客 812

5分钟搞定Spring Boot全局异常处理:参数校验错误如何优雅返回JSON

本文详细介绍了Spring Boot中如何实现全局异常处理,特别是针对参数校验错误的JSON响应。通过@Validated注解和统一异常处理机制,开发者可以优雅地处理参数校验问题,提升API的健壮性和用户体验。文章还涵盖了分组校验、自定义注解等高级技巧,帮助构建更规范的参数校验体系。

kafka6courier的博客 612
上一篇: Spring Boot 实战:从0到1搭建简单管理后台
下一篇: Spring Boot 接口日志统一打印方案
码客日记
博客等级 码龄6年 149粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

码客日记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值