1,前端参数不可信,对于后端开发人员来说应该是一条铁律,所以对于前端参数的校验,必不可少,而统一的前端参数校验工具,对我们进行参数校验起到事半功倍的效果

2,统一参数校验工具ValidParamUtils

public class ValidParamUtils {

    public static void validInputParams(BindingResult bindingResult) throws ParameterValidErrorException {
if(bindingResult.hasErrors()) {
//如果对于字段的校验出现错误,抛出统一自定义参数异常
String errorMessage = ValidParamUtils.errorParamInfo(bindingResult);
if (!StringUtils.isBlank(errorMessage)){
throw new ParameterValidErrorException(ErrorCode.BAD_REQUEST, errorMessage);
}
throw new ParameterValidErrorException(ErrorCode.BAD_REQUEST);
}
} public static String errorParamInfo(BindingResult bindingResult) {
//从绑定结果中,获取错误信息
FieldError fe = bindingResult.getFieldError(); if(fe != null) {
return fe.getDefaultMessage();
} ObjectError oe = bindingResult.getGlobalError();
if(oe != null) {
return oe.getDefaultMessage();
} return "";
}

3,自定义参数异常

public abstract class ParamErrorException extends RuntimeException {

    /**
*
*/
private static final long serialVersionUID = 1L;
private ErrorCode errorCode; public BaseException() {
} public BaseException(ErrorCode errorCode) {
super(errorCode.getName());
this.errorCode = errorCode;
} public BaseException(ErrorCode errorCode, String msg) {
super(msg);
this.errorCode = errorCode;
} public ErrorCode getErrorCode() {
return errorCode;
} public void setErrorCode(ErrorCode errorCode) {
this.errorCode = errorCode;
}
}

4,使用自定义的统一参数校验工具

 @PostMapping(value = "/manage/ads/theme/add")
public Result addThemeActivity(@RequestBody @Validated(value = {AddOrUpdateThemeActivityRequest.AddThemeActivityGroup.class}) AddOrUpdateThemeActivityRequest addOrUpdateThemeActivityRequest, BindingResult bindingResult) {
LOGGER.info("manage addThemeActivity param:{}", JSON.toJSONString(addOrUpdateThemeActivityRequest));
//参数校验
ValidParamUtils.validInputParams(bindingResult);
Integer themeActivityNum = themeActivityService.selectThemeActivityByTitleAndId(addOrUpdateThemeActivityRequest.getTitle(), null);
if (themeActivityNum > 0) {
LOGGER.warn(String.format("%s. title:%s", ErrorCode.MANAGE_PROJECT_THEME_TITLE_EXIST.getName(), addOrUpdateThemeActivityRequest.getTitle()));
return Result.builder().failed(ErrorCode.MANAGE_PROJECT_THEME_TITLE_EXIST).build();
}
managerBannerService.insertThemeActivityInfo(addOrUpdateThemeActivityRequest);
sendBizLog(addOrUpdateThemeActivityRequest.getTitle());
LOGGER.info("manage addThemeActivity success. ");
return Result.builder().data("新增专题活动成功").success().build();
}

前端参数统一校验工具类ValidParamUtils的更多相关文章

  1. java-TokenProcessor令牌校验工具类

    TokenProcessor令牌校验工具类 public class TokenProcessor { private long privious;// 上次生成表单标识号得时间值 private s ...

  2. java常用正则校验工具类

    正则常用校验工具类 import java.util.regex.Pattern; /** * @program: * @description: 校验工具类 * @author: xujingyan ...

  3. JavaScript 数据值校验工具类

    /** * 数据值校验工具类 */ var checkService = { // 不校验 none: function () { return true; }, //非空校验 isEmpty: fu ...

  4. 兼容 Spring Boot 1.x 和 2.x 配置类参数绑定的工具类 SpringBootBindUtil

    为了让我提供的通用 Mapper 的 boot-starter 同时兼容 Spring Boot 1.x 和 2.x,增加了这么一个工具类. 在 Spring Boot 中,能够直接注入 XXProp ...

  5. spring boot 输入参数统一校验

    1 引入spring boot validate    maven 依赖 <!-- 验证 --> <dependency> <groupId>org.hiberna ...

  6. Java可变参数与Collections工具类使用了解

    今天发现jdk1.5后增加了个可变参数,以前还一直不晓得 public static void main(String[] args) { System.out.println(getNum(1,2, ...

  7. Java自学第6期——Collection、Map、迭代器、泛型、可变参数、集合工具类、集合数据结构、Debug

    集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型的元素,可以存储基本数据类型值. ...

  8. https请求之绕过证书安全校验工具类(原)

    package com.isoftstone.core.util; import java.io.BufferedReader; import java.io.ByteArrayOutputStrea ...

  9. 【uniapp 开发】校验工具类 CheckUtil

    校验手机号格式 /** * 验证是否为电话号码(座机) * * @param {} * source */ function isTelephone(source) { var regex = /^( ...

随机推荐

  1. Mysql导入数据时-data truncated for column..

    在导入Mysql数据库时,发现怎么也导入不进去数据,报错: 查看表定义结构:可以看到comm 定义类型为double类型 原来是因为数据库文件中: 7369    smith    clerk     ...

  2. ansible基本模块-cron

    ansible   XXX   -m   cron   -a   "name=‘XXX ’   job=‘执行的命令’   minute=XXX "                ...

  3. adminlte+layui框架搭建2 - 动态菜单

    动态菜单 参考文章:https://cloud.tencent.com/developer/article/1342558 主要修改两个地方: 1.系统初始化加载一级菜单,在adminlte.js文件 ...

  4. Tomcat 连接数与线程池详解

    前言 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector). 在前面的文章 详解Tomcat配置文件server.xm ...

  5. JAVA基础——Java 中必须了解的常用类

    Java中必须了解的常用类 一.包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的,比如基本类型不 ...

  6. [转] python提取计算结果的最大最小值及其坐标

    python提取计算结果的最大最小值及其坐标 我们在fluent当中后处理的时候,可以通过fluent本身得到某些物理量的最大值和最小值,但是我们却无法确定这些最大值和最小值的具体位置.其实我们可以将 ...

  7. RPC 定义 和 原理

    一.RPC 1. RPC是什么 RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. ...

  8. bzoj3262 陌上花开 cdq分治(入门)

    题目传送门 思路:cdq分治处理偏序关系的模板题,主要就是学cdq分治吧,还在入门中. 代码其实也很好理解,记得树状数组操作的上限是 z的最大值,不是n的最大值,这个细节wa了好久. #include ...

  9. Nginx 安装--图片服务器搭建

    1.  nginx 需要依赖以下模块: gzip模块需要 zlib 库 rewrite模块需要 pcre 库 ssl 功能需要openssl库 1.1.安装pcre 1.         获取pcre ...

  10. python (1) 还不是大全的小问题

    1.pythone 获取系统时间 import datetime nowTime=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')#现在 pa ...