spring boot 参数的过滤注解与实战

简介: 在Spring Boot应用中,对于入参的过滤,通常会涉及到对Web层的数据验证和处理。Spring Boot借助Spring框架提供了强大的验证框架支持,主要基于JSR-303/JSR-380(Bean Validation API)规范,以及Spring自身的@Valid或@Validated注解来实现请求参数的验证。以下是一些常见的使用案例来展示如何对参数进行过滤和验证。

在Spring Boot应用中,对于入参的过滤,通常会涉及到对Web层的数据验证和处理。Spring Boot借助Spring框架提供了强大的验证框架支持,主要基于JSR-303/JSR-380(Bean Validation API)规范,以及Spring自身的@Valid@Validated注解来实现请求参数的验证。以下是一些常见的使用案例来展示如何对参数进行过滤和验证。

基本使用

  1. 添加依赖

首先确保你的pom.xml中包含了Spring Boot的starter依赖以及Bean Validation API的实现(如Hibernate Validator)。

xml复制代码

<!-- Spring Boot Starter Web -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- Bean Validation API, Hibernate Validator -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  1. 创建模型并使用验证注解

比如,你有一个用户提交表单的场景,你需要验证用户的输入。

java复制代码

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

public class UserInput {

    @NotBlank(message = "用户名不能为空")
    private String username;

    @Size(min = 6, max = 20, message = "密码长度必须在6到20字符之间")
    private String password;

    // Getter和Setter略
}
  1. 在Controller中使用@Valid@Validated进行验证

java复制代码

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping("/register")
    public String register(@Validated @RequestBody UserInput userInput) {
        // 处理用户注册逻辑
        return "注册成功!";
    }
}

当请求到达该接口时,Spring会自动根据UserInput类中的注解对传入的数据进行验证,如果验证失败,则默认抛出一个异常,通常会转换为400 Bad Request响应返回给客户端。

分组验证

你还可以利用分组功能,对不同的操作应用不同的验证规则。

  1. 定义验证组接口

java复制代码

public interface OnCreate {}
public interface OnUpdate {}
  1. 在模型类中指定组

java复制代码

public class UserInput {

    @NotBlank(message = "用户名不能为空", groups = OnCreate.class)
    private String username;

    @Size(min = 6, max = 20, message = "密码长度必须在6到20字符之间", groups = OnCreate.class)
    private String password;

    // Getter和Setter略
}
  1. 在Controller中指定验证组

java复制代码

@PostMapping("/register")
public String register(@Validated(OnCreate.class) @RequestBody UserInput userInput) {
    // 处理用户注册逻辑
    return "注册成功!";
}

这样,你可以根据不同的操作(如创建和更新)对同一数据模型应用不同的验证规则。

自定义验证注解

如果内置的验证注解无法满足你的需求,你还可以创建自定义的验证注解。

  1. 创建自定义验证注解

java复制代码

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Documented
@Constraint(validatedBy = MyConstraintValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyConstraint {
    String message() default "默认验证失败消息";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
  1. 实现验证逻辑

java复制代码

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class MyConstraintValidator implements ConstraintValidator<MyConstraint, String> {

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // 实现你的验证逻辑
        return false; // 示例总是返回失败
    }
}
  1. 使用自定义验证注解

java复制代码

public class UserInput {

    @MyConstraint(message = "自定义验证消息")
    private String customField;

    // Getter和Setter略
}

通过这种方式,你可以非常灵活地实现各种自定义验证逻辑,并通过注解的方式轻松应用到你的数据模型上。

以上就是在Spring Boot中对参数进行过滤和验证的一些常见做法。通过结合使用Bean Validation提供的注解以及Spring的支持,你可以非常方便地对输入数据进行校验,进而提高应用的健壮性和安全性。

相关文章
|
8月前
|
缓存 监控 Java
SpringBoot @Scheduled 注解详解
使用`@Scheduled`注解实现方法周期性执行,支持固定间隔、延迟或Cron表达式触发,基于Spring Task,适用于日志清理、数据同步等定时任务场景。需启用`@EnableScheduling`,注意线程阻塞与分布式重复问题,推荐结合`@Async`异步处理,提升任务调度效率。
1199 128
|
7月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
1222 2
Spring Boot 3.x 微服务架构实战指南
|
7月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
8月前
|
消息中间件 Ubuntu Java
SpringBoot整合MQTT实战:基于EMQX实现双向设备通信
本教程指导在Ubuntu上部署EMQX 5.9.0并集成Spring Boot实现MQTT双向通信,涵盖服务器搭建、客户端配置及生产实践,助您快速构建企业级物联网消息系统。
2679 1
|
7月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
700 2
|
8月前
|
XML Java 数据格式
常用SpringBoot注解汇总与用法说明
这些注解的使用和组合是Spring Boot快速开发和微服务实现的基础,通过它们,可以有效地指导Spring容器进行类发现、自动装配、配置、代理和管理等核心功能。开发者应当根据项目实际需求,运用这些注解来优化代码结构和服务逻辑。
511 12
|
JSON 前端开发 Java
SpringBoot 实战:一招实现结果的优雅响应
今天说一下 Spring Boot 如何实现优雅的数据响应:统一的结果响应格式、简单的数据封装。
650 0
SpringBoot 实战:一招实现结果的优雅响应
|
7月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。