JAVA参数验证 Validation(一)

作者邮箱:[email protected]

现状:部分人验证参数时,是在每个方法内对每一个参数进行一一验证;但是如果这些参数在多个接口共同会使用到,就会增加一部分重复代码劳作,如果能将这些参数验证放到一起,那么代码将会变得更加简洁。

现状

@Override
    public RechargeResponse recharge(RechargeRequest request) {

            if (request.getStar() <= 0 || request.getCurrencyAmount().compareTo(new BigDecimal(0)) <= 0) {
                response.setCode(ErrorObjects.E1014.getErrorCode());
                response.setDesc(ErrorObjects.E1014.getErrorDetail());
                return response;
            }

            if (!CurrencyType.isExist(request.getCurrencyType())) {
                response.setCode(ErrorObjects.E1015.getErrorCode());
                response.setDesc(ErrorObjects.E1015.getErrorDetail());
                return response;
            }

            if (!PayChannel.isExist(request.getPayChannel())) {
                response.setCode(ErrorObjects.E1002.getErrorCode());
                response.setDesc(ErrorObjects.E1002.getErrorDetail());
                return response;
            }
    }

这里介绍到Validation来帮助验证参数

    <!--validator start -->
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.0.Final</version>
        </dependency>
    <!--validator end -->

声明一个User对象,注册和登录接口需要

public class User implements Serializable {

    @NotBlank(message = "用户名不能为空")
    private String userName;

    @NotBlank(message = "密码不能为空")
    private String password;
}

这样我们在Controller层的传入参数就可以这样写

    //直接抛出校验异常,外围统一处理
    @RequestMapping(value = "/register", method = RequestMethod.POST)
    @ResponseBody
    public CommonResponse register(@Validated @RequestBody User user) {

        CommonResponse response = new CommonResponse();
        response.setCode(ErrorObjects.OK.getErrorCode());
        response.setDesc(ErrorObjects.OK.getErrorDetail());

        return response;
    }

spring会验证传入参数是否符合User对象中参数验证规则,若不符合,则直接抛出异常(点击查看统一异常捕获方式),当然也可以在该方法直接处理校验异常(并不会抛出异常),如下,

//在方法内处理校验异常
@RequestMapping(value = "/register", method = RequestMethod.POST)
    @ResponseBody
    public CommonResponse register(@Validated @RequestBody User user, BindingResult result) {
        CommonResponse response = new CommonResponse();

        if (result.hasErrors()) {
            result.getFieldError().getDefaultMessage();// 打印出第一个error消息
            result.getFieldErrors();// 所有的error
        }

        return response;
    }

下面贴上部分校验规则:
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_33144861/article/details/77894149
今日推荐