当前位置: 首页 > wzjs >正文

网站竞价难做优化永州做网站公司

网站竞价难做优化,永州做网站公司,品牌推广计划书怎么写,靖江做网站的单位目录 一、Spring Boot Validation简介 1.1 什么是spring-boot-starter-validation? 1.2 核心优势 二、快速集成与配置 2.1 添加依赖 2.2 基础配置 三、核心注解详解 3.1 常用校验注解 3.2 嵌套对象校验 四、实战开发步骤 4.1 DTO类定义校验规则 4.2 Cont…

目录

一、Spring Boot Validation简介

1.1 什么是spring-boot-starter-validation?

1.2 核心优势

二、快速集成与配置

2.1 添加依赖

2.2 基础配置

三、核心注解详解

3.1 常用校验注解

3.2 嵌套对象校验

四、实战开发步骤

4.1 DTO类定义校验规则

4.2 Controller层启用校验

4.3 统一异常处理

五、高级功能实现

5.1 自定义校验规则

5.2 分组校验

六、常见问题与解决方案

6.1 校验不生效的常见原因

6.2 国际化配置

七、性能优化建议

八、测试验证

8.1 单元测试示例

8.2 API测试(使用MockMvc)

九、总结与最佳实践


一、Spring Boot Validation简介

1.1 什么是spring-boot-starter-validation?

  spring-boot-starter-validation 是Spring Boot对Bean Validation API(JSR 380)的封装实现,基于Hibernate Validator提供强大的数据校验功能。它能帮助开发者:

  • 声明式校验:通过注解定义校验规则

  • 统一错误处理:自动生成标准错误响应

  • 多层级校验:支持DTO、Controller、Service各层

1.2 核心优势

  • 零配置启动:自动装配Validator

  • 丰富注解库:内置30+常用校验规则

  • 高度可扩展:支持自定义校验规则

  • 国际化支持:轻松实现多语言错误提示


二、快速集成与配置

2.1 添加依赖

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

2.2 基础配置

application.yml

spring:messages:basename: i18n/validation # 国际化文件路径encoding: UTF-8server:error:include-message: always # 显示具体错误信息
 

三、核心注解详解

3.1 常用校验注解

注解适用类型说明示例
@NotNull任意类型值不能为null@NotNull(message="ID必填")
@NotEmptyString/Collection非空且长度/大小>0@NotEmpty
@NotBlankString至少包含一个非空格字符@NotBlank
@Size字符串/集合长度/大小范围@Size(min=6, max=20)
@EmailString邮箱格式校验@Email
@PatternString正则表达式匹配@Pattern(regexp="^1[3-9]\\d{9}$")
@Min/@Max数值类型数值范围限制@Min(18)
@Future/@Past时间类型未来/过去时间校验@Future

3.2 嵌套对象校验

public class OrderDTO {@Valid // 启用嵌套校验private UserDTO user;@Validprivate List<@Valid ProductItem> items;
}public class UserDTO {@NotBlankprivate String name;@Emailprivate String email;
}
 

四、实战开发步骤

4.1 DTO类定义校验规则

public class UserCreateRequest {@NotBlank(message = "{user.name.required}")@Size(max = 50, message = "{user.name.length}")private String name;@Email(message = "{user.email.invalid}")private String email;@Pattern(regexp = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$", message = "{user.password.policy}")private String password;
}

4.2 Controller层启用校验

@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody @Valid UserCreateRequest request) {// 业务逻辑处理return ResponseEntity.ok(userService.create(request));
}

4.3 统一异常处理

@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(MethodArgumentNotValidException.class)public ResponseEntity<ErrorResponse> handleValidationException(MethodArgumentNotValidException ex) {List<String> errors = ex.getBindingResult().getFieldErrors().stream().map(error -> error.getField() + ": " + error.getDefaultMessage()).collect(Collectors.toList());return ResponseEntity.badRequest().body(new ErrorResponse("VALIDATION_FAILED", errors));}
}
 

五、高级功能实现

5.1 自定义校验规则

步骤1:创建注解

@Target({FIELD, PARAMETER})
@Retention(RUNTIME)
@Constraint(validatedBy = PhoneNumberValidator.class)
public @interface PhoneNumber {String message() default "{validation.phone.invalid}";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

步骤2:实现校验逻辑

public class PhoneNumberValidator implements ConstraintValidator<PhoneNumber, String> {private static final Pattern PHONE_PATTERN = Pattern.compile("^1[3-9]\\d{9}$");@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {if (value == null) return true; // 允许空值,配合@NotNull使用return PHONE_PATTERN.matcher(value).matches();}
}

5.2 分组校验

public interface CreateGroup {}
public interface UpdateGroup {}public class UserDTO {@Null(groups = CreateGroup.class)@NotNull(groups = UpdateGroup.class)private Long id;@NotBlank(groups = {CreateGroup.class, UpdateGroup.class})private String name;
}@PostMapping("/users")
public ResponseEntity<?> createUser(@RequestBody @Validated(CreateGroup.class) UserDTO dto) {// 创建逻辑
}
 

六、常见问题与解决方案

6.1 校验不生效的常见原因

  1. 缺少@Valid注解:Controller方法参数前忘记添加

  2. 错误异常处理:覆盖了默认的异常处理逻辑

  3. 静态嵌套类:DTO使用static内部类导致无法实例化

  4. 字段访问权限:校验字段需要getter方法

6.2 国际化配置

messages.properties

user.name.required=用户名不能为空
user.email.invalid=邮箱格式不正确
validation.phone.invalid=手机号格式错误

validation_zh_CN.properties

javax.validation.constraints.NotNull.message=不能为null
 

七、性能优化建议

  1. 避免过度校验:只在必要层级进行校验

  2. 合理使用校验组:减少不必要的校验逻辑

  3. 缓存Validator:重复使用Validator实例

@Bean
public Validator validator() {return Validation.buildDefaultValidatorFactory().getValidator();
}
 

八、测试验证

8.1 单元测试示例

@SpringBootTest
public class UserValidationTest {@Autowiredprivate Validator validator;@Testvoid whenInvalidEmail_thenValidationFails() {UserCreateRequest request = new UserCreateRequest();request.setEmail("invalid-email");Set<ConstraintViolation<UserCreateRequest>> violations = validator.validate(request);assertThat(violations).hasSize(1);}
}

8.2 API测试(使用MockMvc)

@WebMvcTest(UserController.class)
class UserControllerTest {@Autowiredprivate MockMvc mvc;@Testvoid createUser_withInvalidPassword_returnsBadRequest() throws Exception {String json = """{"name": "test","email": "test@example.com","password": "123"}""";mvc.perform(post("/users").contentType(APPLICATION_JSON).content(json)).andExpect(status().isBadRequest()).andExpect(jsonPath("$.errors[0]").value("password: 密码必须包含字母和数字"));}
}
 

九、总结与最佳实践

  1. 分层校验原则

    • Controller层:校验输入格式

    • Service层:校验业务规则

    • DAO层:校验数据完整性

  2. 错误消息规范

    • 使用明确的错误代码

    • 保持消息内容用户友好

    • 实现多语言支持

  3. 文档化校验规则

    • 在Swagger文档中展示参数约束

    • 维护校验规则变更日志


文章转载自:

http://Fokv9jSj.pcrjL.cn
http://a2LJXMBg.pcrjL.cn
http://pISXkY98.pcrjL.cn
http://cfUP0JP2.pcrjL.cn
http://OkX8qCTC.pcrjL.cn
http://paL2fz9f.pcrjL.cn
http://st1wIvBa.pcrjL.cn
http://5O49cTqY.pcrjL.cn
http://nbuhEWX3.pcrjL.cn
http://yBkZfijZ.pcrjL.cn
http://44APCEnj.pcrjL.cn
http://D9cRN87E.pcrjL.cn
http://oSShUjDu.pcrjL.cn
http://g5NrSzJ5.pcrjL.cn
http://x5DVLY6d.pcrjL.cn
http://i4EP3fVy.pcrjL.cn
http://lzqCybYI.pcrjL.cn
http://zWKq7JzS.pcrjL.cn
http://hhljwDLG.pcrjL.cn
http://0GjzKdYc.pcrjL.cn
http://bKCZV7rv.pcrjL.cn
http://VB7q8caE.pcrjL.cn
http://lzsjsdz3.pcrjL.cn
http://0nONnoc9.pcrjL.cn
http://KOaD68G2.pcrjL.cn
http://iNi7WpS6.pcrjL.cn
http://nE7F5gY1.pcrjL.cn
http://OdoKvNNf.pcrjL.cn
http://hLhuVo1C.pcrjL.cn
http://hXfu8UUZ.pcrjL.cn
http://www.dtcms.com/wzjs/749207.html

相关文章:

  • 山东省建设厅注册中心网站怎么查询在建工程
  • 做任务得得q币的网站西部数码网站备案查询
  • 合肥做网站的宁波网站推广怎样做
  • 做reference的网站icann官方网站
  • 网站建设公司诺玺网络如何建立公司的销售网站
  • 动易初级中学网站模板cms 6.8电脑版网站建设合同
  • 企业网站一定要花钱吗中国设计之家
  • 国内人做韩国网站一般都卖什么手续承德网站建设规划
  • 张家口网站建设价格网站改版的意义
  • 网站建设 美食站点开发公司消防未移交物业
  • 深圳做生鲜食材的网站叫什么网站问答平台推广方案
  • 牡丹江市营商环境建设监督局网站提供网站建设费用
  • 深圳罗湖做网站的公司甘肃交通工程建设监理公司网站
  • 旅游网站建设的总结哪家建站好
  • 网站建设推广的话术linux上搭建网站
  • 用ps怎么做网站效果图免费的logo网站
  • 苏州网站建设制作公司php网站开发技术训练心得
  • 教育行业网站wordpress10万数据
  • 杭州手机网站开发做网站资料
  • 做淘客网站用什么上传文件德阳网站网站建设
  • 站长工具seo综合查询seo关键词优化技巧
  • 网站备案号申请电商网站开发难点
  • 广告网站开发背景网络规划师
  • 网站建站服务公司地址怎么做营销网站推广
  • 大学网站建设与管理职责范例网站怎么做
  • wordpress 站内链接青岛网站互联网公司
  • phpcms模板行业网站淄博做网站建设公司
  • 重庆公司排名2019西安百度seo代理
  • php是网站开发语言吗重庆网站设计制作价格
  • 为什么网页不能打开建设银行网站三河seo