传送机
上文提到,我们的招聘功能已经完成了!所以我们再网上发了许多招聘.由于总架构师黄杰的影响力.所以应聘的人是人山人海.其中就有许多不法之徒.不守规矩.
在这里看到有许多人隐瞒了许多信息.导致我们无法判断这些人到底是不是真心老应聘的,还是想搞破坏的.嗯…这可不行,我要代表月亮消灭你们!
再来:
1.引入spring validate包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.对需要验证的字段增加注解
/**
* 登录名
*/
@NotBlank(message = "用户名不能为空")
private String username;
/**
* 密码
*/
@NotEmpty(message = "密码不能为空")
@Size(min = 6,max = 16,message = "密码长度必须在6-16位之间")
private String password;
/**
* 性别
*/
@NotBlank(message = "性别不能为空")
private String sex;
3.在入口处继续增加拦截
/**
* 招聘员工
*
* @return
*/
@PostMapping("/save")
private String saveUser(@Valid @RequestBody UserBean userBean, BindingResult bindingResult) throws Exception {
List<ObjectError> allErrors = bindingResult.getAllErrors();
if (!CollectionUtils.isEmpty(allErrors)) {
throw new Exception(allErrors.parallelStream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.joining(";")));
}
Optional.ofNullable(userBean).map(UserBean::getFavoriteList)
.map(e -> String.join(",", e))
.ifPresent(userBean::setFavorites);
userService.save(userBean);
return "success";
}
4.来看效果:
功能是完成了,但是提示不怎么友好
而且这么写也不好看.咋能符合咱们架构师的身份.盘他!
一个好的框架不应该是仅仅满足业务,而且需要代码优雅,方便维护,对通用的部分采取封装.配置等,来减少对业务的入侵.试开发更加专注于业务.而不是繁复的判断.
继续改造:
@Data
public class BaseResponse {
public static Integer SUCCESS=200;
/**
* 方法的ID
*/
private String id;
/**
* 方法
*/
private String method;
/**
* 返回的code
*/
private Integer code;
/**
* 返回的消息
*/
private String message;
/**
* 返回的数据
*/
private Object data;
}
先统一返回参数. 这样当我们提供接口时,客户就不会因为返回类型多样化而迷惑了
public class ResponseUtil {
public static BaseResponse build(int code){
return build(code,null,null);
}
private static BaseResponse build(int code,String msg, Object data) {
BaseResponse response = new BaseResponse();
response.setCode(code);
response.setMessage(msg);
response.setData(data);
return response;
}
public static BaseResponse buildMsg(int code,String msg) {
return build(code,msg,null);
}
}
在提供一个util.方便我们调用
if (!CollectionUtils.isEmpty(allErrors)) {
String errors = allErrors.parallelStream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.joining(";"));
return ResponseUtil.buildMsg(BaseResponse.SUCCESS,errors);
}
在调用失败的时候,就可以提供友好的返回值了.
valid功能非常强大.顺便帮大家捋一捋.
@NotEmpty(message = "密码不能为空")
@Size(min = 6,max = 16,message = "密码长度必须在6-16位之间")
private String password;
@Email(message = "邮箱格式不正确")
private String email;
@AssertTrue(message = "社招只要学生")
private Boolean student;
@AssertFalse(message = "不能招收童工")
private Boolean boy;
@NotNull(message = "身份证号码必填")
@Pattern(regexp = "\\d{15,18}",message = "身份证必须是15或者18位")
private String cardNo;
@Null(message = "没有工作经验")
private String jobs;
springboot提供了非常多的验证规则,这里把常用的给大家解释一下.
校验的参数必须是boolean类型,而且必须为false.否则报错
@AssertFalse
校验的参数必须是boolean类型,而且必须为false.否则报错
@AssertTrue
检验的类型为string,而且不能为null或者""都不行
@NotEmpty
检验的类型为string,而且不能为null或者""," "等空字符串都不行
@NotBlank
指对象不能为空.但是可以接受如""之类的空字符串.
@NotNull
正则校验 regexp 参数必填.正则表达式大家可以单独学习一下.
@Pattern
邮箱校验,也可以单独输入规则
@Email
嗯.干到这里.似乎有点意思了呢~下一章继续.要是有朋友有啥问题也欢迎留言