今天继续为大家分享在工作中如何优雅的校验接口的参数的合法性以及如何统一处理接口返回的json格式。每个字都是干货,原创不易,分享不易。
validation主要是校验用户提交的数据的合法性,比如是否为空,密码是否符合规则,邮箱格式是否正确等等,校验框架比较多,用的比较多的是hibernate-validator, 也支持国际化,也可以自定义校验类型的注解,这里只是简单地演示校验框架在Spring Boot中的简单集成,要想了解更多可以参考 hibernate-validator。
1. pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2. dto
public class UserInfoIDto {
private Long id;
@NotBlank
@Length(min=3, max=10)
private String username;
@NotBlank
@Email
private String email;
@NotBlank
@Pattern(regexp="^((13[0-9])|(15[^4,\\D])|(18[0,3-9]))\\d{8}$", message="手机号格式不正确")
private String phone;
@Min(value=18)
@Max(value = 200)
private int age;
@NotBlank
@Length(min=6, max=12, message="昵称长度为6到12位")
private String nickname;
// Getter & Setter
}
3. controller
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
@RestController
public class SimpleController {
@PostMapping("/users")
public String register(@Valid @RequestBody UserInfoIDto userInfoIDto, BindingResult result){
if (result.hasErrors()) {
FieldError fieldError = result.getFieldError();
String field = fieldError.getField();
String msg = fieldError.getDefaultMessage();
return field + ":" + msg;
}
System.out.println("开始注册用户...");
return "success";
}
}
4. 去掉BindingResult参数
每个接口都需要BindingResult参数,而且每个接口都需要处理错误信息,这样增加一个参数也不优雅,处理错误信息代码量也很重复。如果去掉BindingRes