Spring中@Pattern的使用

本文介绍如何在SpringBoot项目中使用@Validated和@Pattern注解进行参数有效性验证,并展示了一个具体的例子,包括Controller层的配置及Json响应结果。

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

Controller层

@RestController
@Validated
class Controller {
  // ...
}

为Controller添加@Validated表示启用验证。

@GetMapping
public ResponseEntity<List<Permission>> query(@RequestHeader("iv-user") String userId,
                                                  @Pattern(regexp = "^accessor$", message = "请求参数不合法")
                                                  @RequestParam("findBy") String accessor,
                                                  @RequestParam("accessorId") long accessorId){
        //...
}

为Controller中特定请求添加@Pattern(regexp = "^accessor$", message = "请求参数不合法")正则表达式校验。

Json响应

{
    "timestamp": "2018-07-19T02:08:01.372+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "query.accessor: 请求参数不合法",
    "path": "/budget/permissions"
}

总结

很方便,还可以自己捕获这个异常的对返回进行自定义处理。

参考:

Spring Boot REST @RequestParam not being Validated

转载于:https://my.oschina.net/fxtxz2/blog/1859600

<think>好的,我需要解释Java中的@Pattern注解,特别是用于验证4到50个中英文字符的情况。首先,@Pattern是Jakarta Bean Validation API的一部分,它通过正则表达式来验证字符串字段。用户希望限制输入为中英文,长度在4到50之间。 首先,正则表达式部分。中文字符的Unicode范围通常是\u4e00-\u9fa5,英文字母包括大小写a-zA-Z。所以组合起来,正则表达式应该是匹配这些字符,并且长度符合要求。这里需要注意量词的使用,{4,50}表示至少4个,最多50个字符。 然后,考虑Jakarta EE和Spring Boot中的依赖问题。如果用户使用的是Spring Boot,可能需要引入spring-boot-starter-validation依赖,确保相关的注解和验证器可用。 接下来,示例代码部分。创建一个带有@Pattern注解的字段,例如在User类中的username字段上应用该注解,并给出正确的正则表达式。同时,需要在Controller中使用@Valid来触发验证。 可能出现的常见错误包括正则表达式错误,比如忘记处理中文字符的范围,或者量词使用不正确。另外,依赖缺失也会导致注解不生效,需要提醒用户检查依赖配置。 最后,相关问题的设计应该围绕@Pattern的其他用法、正则表达式的调整、依赖配置以及与其他验证注解的组合使用,这些都是用户可能进一步想知道的内容。</think><< 在Java中,`@Pattern`注解用于通过正则表达式验证字符串字段的格式。若要验证4-50个中英文字符(包括中文和英文字母),可以通过以下方式实现: ### 1. 依赖配置 确保项目中包含Bean Validation依赖: ```xml <!-- 若使用Jakarta EE 9+ --> <dependency> <groupId>jakarta.validation</groupId> <artifactId>jakarta.validation-api</artifactId> <version>3.0.2</version> </dependency> <!-- 或Spring Boot场景下使用 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> ``` ### 2. 正则表达式解析 中文字符的Unicode范围为`\u4e00-\u9fa5`,英文字符为`a-zA-Z`,因此正则表达式为: ```java @Pattern(regexp = "^[\u4e00-\u9fa5a-zA-Z]{4,50}$") ``` ### 3. 完整代码示例 ```java public class User { @Pattern( regexp = "^[\u4e00-\u9fa5a-zA-Z]{4,50}$", message = "用户名必须为4-50个中英文字符" ) private String username; // Getter/Setter } // 在Controller中使用验证 @PostMapping("/register") public ResponseEntity<?> createUser(@Valid @RequestBody User user) { // 业务逻辑 } ``` ### 常见问题原因 1. **正则表达式错误**:未正确覆盖中文字符范围或忘记包含英文字母 2. **长度限制失效**:未正确使用量词`{4,50}`导致长度验证未生效 3. **依赖缺失**:未添加Bean Validation实现(如Hibernate Validator) 4. **验证未触发**:Controller方法中缺少`@Valid`注解 ### 验证效果 - 合法输入:"张三John"(4中+4英) - 非法输入:"a1!"(包含特殊字符)、"李"(长度不足)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值