前言:
今天朋友们对“java数组非空校验”大致比较关切,朋友们都想要分析一些“java数组非空校验”的相关内容。那么小编在网摘上汇集了一些对于“java数组非空校验””的相关内容,希望兄弟们能喜欢,兄弟们一起来学习一下吧!在开发Web应用程序时,参数校验是不可避免的一个过程。在Springboot中,使用参数校验可以使你的代码更加简洁有效,增强客户体验。本文将为大家介绍Springboot中参数校验的实现方法。
一、Spring的校验框架
Spring的校验框架支持两种校验方式:基于注解和自定义校验器。
基于注解
在Spring框架中,可以使用JSR 303和JSR 349注解来进行参数校验,其中最常用的注解有:
1. @NotNull 被注释的元素必须不为 null2. @Size(min=, max=) 被注释的字符串的大小必须在指定范围内3. @Min(value=) 被注释的元素必须是一个数字,它的值必须大于或等于指定的最小值4. @Max(value=) 被注释的元素必须是一个数字,它的值必须小于或等于指定的最大值5. @Pattern(value=) 被注释的元素必须符合指定的正则表达式6. @NotBlank(message =) 被注释的字符串必须非空7. @NotEmpty 被注释的字符串必须非空,和@NotBlank类似,但不能处理全部是空格的情况@NotNull,@NotBlank,@NotEmpty 三者区别//@NotNull:它的作用是标记此参数不允许为null,即不能为空,但可以是空字符串或空集合。它适用于任何类型的参数。//@NotBlank:它的作用是标记此参数不允许为null或空字符串,但可以是空格字符串或空集合。只适用于字符串类型。//@NotEmpty:它的作用是标记此参数不允许为null或空集合,但可以是空字符串或只含空格的字符串。适用于集合类型和字符串类型。//当参数不符合注解标记的要求时,校验框架会抛出相应的异常进行提示。因此,我们在使用这些注解时,要根据具体情况选择使用哪种注解
代码样例:public class User { // 校验用户名非空且长度大于0 @NotBlank(message = "用户名不能为空") private String username; // 校验密码非空 @NotEmpty(message = "密码不能为空") private String password; // 校验年龄不为null且大于0 @NotNull(message = "年龄不能为空") @Min(value = 1, message = "年龄必须大于0") private Integer age; // 校验地址集合非空且元素数量大于0 @NotEmpty(message = "地址不能为空") private List<String> addresses; // 校验电话号码数组非空且元素数量大于0 @NotEmpty(message = "电话号码不能为空") private String[] phoneNumbers;}
2.自定义注解
如果内置的验证注解不能满足要求,可以通过实现ConstraintValidator接口来编写自己的验证逻辑。下面以验证手机号码为例,代码如下所示:
@Target({ElementType.METHOD, ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Documented@Constraint(validatedBy = PhoneValidator.class)public @interface Phone { String message() default "Invalid phone number"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};}
自定义校验器:
public class PhoneValidator implements ConstraintValidator<Phone,String> { @Override public void initialize(Phone constraintAnnotation) { } @Override public boolean isValid(String value, ConstraintValidatorContext context) { Pattern pattern = Pattern.compile("^1[3|4|5|7|8][0-9]\\d{8}$"); if (value == null || "".equals(value)) { return true; } Matcher matcher = pattern.matcher(value); return matcher.matches(); }}二、Springboot中的使用配置
首先需要在pom.xml中引入以下依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId></dependency>
然后在需要进行参数校验的接口中,添加注解@Validated。这一步非常重要,因为Springboot默认是不启用参数校验的。
Controller
在Controller中,可以使用@RequestBody或@RequestParam注解来接收请求参数。同时,要在参数前加上验证注解。例如:
@RestController@RequestMapping("/demo")@Validatedpublic class DemoController { @PostMapping("/phoneCheck") public String phoneCheck(@RequestParam("phone") @Phone String phone) { return "success"; }}
在以上代码中,我们使用了自定义校验器@Phone来验证手机号码输入是否合法。
处理校验结果
当参数校验失败时,Springboot会自动抛出异常,如何将校验结果返回给前端呢?
可以在接口中添加BindingResult对象来处理校验结果。例如:
@PostMapping("/phoneCheck")public Object phoneCheck(@RequestParam("phone") @Phone String phone, BindingResult bindingResult) { if (bindingResult.hasErrors()) {// StringBuilder stringBuilder = new StringBuilder();// for (ObjectError error : bindingResult.getAllErrors()) {// stringBuilder.append(error.getDefaultMessage()).append("\n");Map<String, String> errors = new HashMap<>();result.getFieldErrors().forEach(error -> errors.put(error.getField(), error.getDefaultMessage()));return ResponseEntity.badRequest().body(errors); } // return stringBuilder.toString(); return ResponseEntity.ok().build(); } return null;}
以上代码中,我们首先判断BindingResult对象是否存在错误。如果存在,则遍历所有错误信息,并返回给前端。如果没有错误,则进行正常业务处理。
三、小结
参数校验是Web应用程序开发中的重要环节。在Springboot中,使用JSR 303和JSR 349注解以及自定义校验器来实现参数校验非常方便。同时,通过BindingResult对象可以方便地处理校验结果,提升用户体验。
标签: #java数组非空校验