客户端验证:Validation

验证字段的dto/entity内添加配置

import lombok.Data;
import javax.validation.constraints.Pattern;
 
/**
 * @Classname DictDto
 * @Description 字典 传输类
 * @Date 2020-04-29 9:53
 * @Created by deedywu
 */
public final class DictDto {
 
    @Data
    public static final class ParentInsert {
 
        @Pattern(regexp = "[a-zA-Z0-9_]{1,36}", message = "字段应该在1-36位之间且只能是字母数字组成")
        private String field;
 
        ...
 
    }
 
}

再在全局异常拦截里进行配置

import com.gecxkj.common.util.ResponseResult;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;
 
/**
 * @Classname ControllerAdvice
 * @Description 全局处理
 * @Date 2020/4/2 15:11
 * @Created by deedywu
 */
@ControllerAdvice
public class MyControllerAdvice {
 
    ...
 
    /**
     * 全局异常捕捉处理
     *
     * @param ex exception
     * @return
     */
    @ResponseBody
    @ExceptionHandler(value = Exception.class)
    public ResponseResult errorHandler(Exception ex) {
        ex.printStackTrace();
        ResponseResult rr = new ResponseResult();
        if (ex instanceof BindException) {
            // 获取是否有字段验证的异常
            BindingResult bindingResult = ((BindException) ex).getBindingResult();
            if (bindingResult.hasErrors() && bindingResult.hasFieldErrors()) {
                FieldError fieldError = bindingResult.getFieldError();
                rr.setResult(500, fieldError.getDefaultMessage(), fieldError.getField());
            } else {
                rr.setResult(500, ex.getMessage());
            }
        } else {
            rr.setResult(500, ex.getMessage());
        }
        return rr;
    }
}

ResponseResult 类

import lombok.Data;
import lombok.NoArgsConstructor;
 
/**
 * @Classname ResponseResult
 * @Description 公共的前端返回
 * @Date 2020/4/1 15:22
 * @Created by deedywu
 */
@Data
@NoArgsConstructor
public final class ResponseResult {
 
    /**
     * 返回状态码
     */
    private Integer code = 400;
 
    /**
     * 返回错误信息
     */
    private String msg = "返回错误";
 
    /**
     * 返回数据
     */
    private Object data;
 
    public void setResult(Integer code, String msg, Object data) {
        setResult(code, msg);
        this.data = data;
    }
 
    public void setResult(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }
 
}

最后在controller进行配置 ,入参加入@Valid注解就可以了

@PostMapping("parent")
@ResponseBody
@ApiOperation(value = "父级字典编辑操作", notes = "根据有无id编辑/新增")
public ResponseResult parentEdit(@Valid DictDto.ParentInsert payload) {
    ResponseResult rr = new ResponseResult();
    if (dictService.insert(payload)) {
        rr.setResult(200, "新增字典类型成功!");
    }
    return rr;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSValidation客户端表单验证框架,用在BS系统中,或者简单的网页系统中。表单验证在这些开发中很常见:新用户注册,需要校验某些字段;用户登陆,需要校验;等等。在这之前,页面开发者(JavaScript开发者)需要编写大量的JavaScript来与表单对象交互,并进行校验。常见的校验如不能为空,必须满足长度要求,必须为数字,必须为Email等等。根据一般的经验,如果表单中需要校验的域个数超过10个,开发过程就显得枯燥无味——多段重复的代码不断重复,如果要求跨浏览器,更多的考虑因素使人头疼不已。往往这个页面的验证还不能用于那个验证……虽然逻辑基本相同;但是在大多数情况下,出于种种原因,开发者宁愿(或者没办法)重新编写另一个页面的JavaScript代码。 在系统复杂,表单复杂的场景下,JSValidation的优势更加突出。JSValidation目前能够完成客户端的13种验证如下: ? 取值非空 ? 必须为整数 ? 必须为双精度数 ? 必须为普通英文字符(字母,数字,下划线) ? 必须为中文字符 ? 最小长度 ? 最大长度 ? 是否为Email格式 ? 是否为日期格式(yyyy-mm-dd) ? 自定义的正则表达式 ? 整数范围(大于某数小于某数) ? 双精度数范围 ? 必须与某个域的值相同 使用步骤: 以我所做的测试为例,说明在实际应用中如何使用JSValidation
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值