SpringBoot04:JSR303数据校验及多环境切换

本文介绍Spring Boot中使用JSR303进行数据校验的方法及常见注解,包括@NotNull、@Max等,并演示如何自定义校验规则。此外,还介绍了多环境配置的实现方式,包括多配置文件和YAML多文档块的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


上篇文章传送门

JSR303数据校验

如何使用

Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。我们这里来写个注解让我们的name只能支持Email格式;

@Component //注册bean
@ConfigurationProperties(prefix = "person")
@Validated  //数据校验
public class Person {

    @Email(message="邮箱格式错误") // email必须是邮箱格式
    private String email;
}

运行结果 :default message [不是一个合法的电子邮件地址]

使用数据校验,可以保证数据的正确性;

常见参数

@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;

空检查
@Null       验证对象是否为null
@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank   检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty   检查约束元素是否为NULL或者是EMPTY.
    
Booelan检查
@AssertTrue     验证 Boolean 对象是否为 true  
@AssertFalse    验证 Boolean 对象是否为 false  
    
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
@Length(min=, max=) string is between min and max included.

日期检查
@Past       验证 Date 和 Calendar 对象是否在当前时间之前  
@Future     验证 Date 和 Calendar 对象是否在当前时间之后  
@Pattern    验证 String 对象是否符合正则表达式的规则

.......等等
除此以外,我们还可以自定义一些数据校验规则

多环境切换

profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境;

多配置文件

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本;

例如:
在这里插入图片描述

application-test.properties 代表测试环境配置

application-dev.properties 代表开发环境配置

但是Springboot并不会直接启动这些配置文件,它默认使用application.properties主配置文件

我们需要在application.properties中通过一个配置来选择需要激活的环境:

# 比如在配置文件中指定使用dev环境,我们可以通过设置不同的端口号进行测试;
# 我们启动SpringBoot,就可以看到已经切换到dev下的配置了;
spring.profiles.active=dev

yaml的多文档块

和properties配置文件中一样,但是使用yml去实现多环境选择可以通过分割线---,而不需要创建多个配置文件,更加方便 !

server:
  port: 8081
# 选择要激活哪个环境
spring:
  profiles:
    active: test  # 选择激活test环境

---
server:
  port: 8082
spring:
  profiles: dev # 开发环境的名称


---

server:
  port: 8083
spring:
  profiles: test  # 测试环境的名称

注意:如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的!

配置文件加载位置

外部加载配置文件的方式十分多,我们选择最常用的即可,在开发的资源文件中进行配置!

官方外部配置文件说明参考文档

在这里插入图片描述

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件:

优先级1:项目路径下的config文件夹配置文件
优先级2:项目路径下配置文件
优先级3:资源路径下的config文件夹配置文件
优先级4:资源路径下配置文件

优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载主配置文件;互补配置;

我们在最低级的配置文件中设置一个项目访问路径的配置来测试互补问题;

# 配置项目的访问路径
server.servlet.context-path=/dy

拓展,运维小技巧

指定位置加载配置文件

我们还可以通过spring.config.location来改变默认的配置文件位置

项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;这种情况,一般是后期运维做的多,相同配置,外部指定的配置文件优先级最高

java -jar spring-boot-config.jar --spring.config.location=F:/application.properties

下篇文章传送门

### SpringBoot 整合 SpringMVC 标签库 并完成数据校验 #### 1. 引入必要的依赖 为了在 Spring Boot 中使用 Spring MVC 的标签库以及实现数据校验功能,需要引入 `spring-boot-starter-web` 和 Hibernate Validator 相关的依赖。以下是 Maven 配置: ```xml <dependencies> <!-- Spring Boot Web Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Hibernate Validator for data validation --> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </dependency> </dependencies> ``` 通过引入 `spring-boot-starter-web`,Spring Boot 自动集成了 Spring MVC 框架及其相关组件[^1]。 --- #### 2. 创建控制器类并启用数据校验 下面是一个简单的控制器示例,展示如何利用 Spring MVC 提供的数据绑定和校验机制来验证表单提交的内容。 ```java import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import javax.validation.Valid; @Controller public class UserController { @GetMapping("/form") public String showForm(User user) { return "user-form"; // 映射到 Thymeleaf 或 JSP 页面 } @PostMapping("/submit") public String submitForm(@Valid User user, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return "user-form"; // 如果有错误,则重新渲染表单页面 } return "success"; // 表单成功提交后的跳转页面 } } ``` 在此代码片段中,`@Valid` 注解用于触发参数对象上的约束条件检查,而 `BindingResult` 则捕获校验过程中产生的任何错误信息[^3]。 --- #### 3. 定义实体类并添加校验注解 定义一个包含字段级校验规则的 Java 实体类如下所示: ```java import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; public class User { @NotBlank(message = "用户名不能为空") // 用户名必填 private String username; @Size(min = 6, max = 20, message = "密码长度应在6至20位之间") // 密码长度范围限制 private String password; // Getter and Setter methods omitted for brevity public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } ``` 此部分展示了如何借助 JSR 380(Bean Validation API)中的标准注解对输入数据实施基本的合法性检测[^4]。 --- #### 4. 前端视图模板 假设我们正在使用 Thymeleaf 渲染前端界面,以下是一份 HTML 文件样例,其中嵌套了 Spring MVC 的 `<form:>` 标签支持动态生成带属性绑定的功能性表单控件。 ```html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>User Form</title> </head> <body> <h2>注册新用户</h2> <form th:action="@{/submit}" method="post" th:object="${user}"> <label>Username:</label><br/> <input type="text" th:field="*{username}"/> <span style="color:red;" th:if="${#fields.hasErrors('username')}" th:errors="*{username}">Error Message</span><br/><br/> <label>Password:</label><br/> <input type="password" th:field="*{password}"/> <span style="color:red;" th:if="${#fields.hasErrors('password')}" th:errors="*{password}">Error Message</span><br/><br/> <button type="submit">Submit</button> </form> </body> </html> ``` 这里运用到了 `${}` EL 表达式语法结合 Thymeleaf 特定扩展指令实现了双向数据同步及错误提示显示效果[^2]。 --- #### 5. 启用国际化资源文件(可选) 为了让应用程序具备多语言切换能力,还可以额外配置 messages.properties 文件存储消息键值配对关系,并调整 Controller 层逻辑读取对应的语言版本文案反馈给客户端。 例如,在 resources/messages_en_US.properties 中写入: ``` NotEmpty.user.username=The field 'User Name' is required. Size.user.password=Password must be between {min} and {max} characters long. ``` 随后需确保项目上下文中加载该 bundle 资源路径即可生效。 --- ### 总结 以上内容详尽阐述了一个完整的解决方案链路——从后端服务层接口设计到底层持久化操作封装再到最终呈现于浏览器端交互体验优化全过程。不仅满足题目关于整合 SpringMVC 标签库的要求同时也兼顾实际开发场景下常见的需求点如国际化的处理方式等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值