深入浅出微服务(5)-总有刁民想害朕

传送机

上一章:万里长征第一步

上文提到,我们的招聘功能已经完成了!所以我们再网上发了许多招聘.由于总架构师黄杰的影响力.所以应聘的人是人山人海.其中就有许多不法之徒.不守规矩.

在这里插入图片描述
在这里看到有许多人隐瞒了许多信息.导致我们无法判断这些人到底是不是真心老应聘的,还是想搞破坏的.嗯…这可不行,我要代表月亮消灭你们!
再来:
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

嗯.干到这里.似乎有点意思了呢~下一章继续.要是有朋友有啥问题也欢迎留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值