使用切面实现
/**
* @Auther: liyongli
* @Date: 2019/9/20 14:43
* @Description:
*/
@Slf4j
@Aspect
@Component
@Order(3)
public class ParamValidAspect {
/**
* 定义切入点
*/
@Pointcut("execution(public * com.sunlands.datacenter.framework.web.controller..*(..))")
public void paramValidService() {
}
/**
* 在切入点开始处切入内容
*
* @param joinPoint
*/
@Around("paramValidService()")
public ResBaseDTO<Object> around(ProceedingJoinPoint joinPoint) {
ResBaseDTO<Object> res = new ResBaseDTO<>();
res.setSuccess();
// 获取所有的请求参数
Object[] args = joinPoint.getArgs();
if (null != args && args.length > 0) {
for (Object obj : args) {
if (obj instanceof BindingResult) {
// 参数验证
res = validate((BindingResult) obj);
break;
}
}
}
// 验证通过执行拦截方法,否则不执行
if (res.isSuccess()) {
try {
// 执行拦截方法
joinPoint.proceed();
} catch (Throwable ex) {
log.error("AOP执行拦截方法时异常, {}", ex);
res.setError("AOP执行拦截方法时异常!" + ex.getMessage());
}
}
return res;
}
/**
* 验证
*
* @param bindingResult
* @return
*/
private ResBaseDTO<Object> validate(BindingResult bindingResult) {
ResBaseDTO<Object> res = new ResBaseDTO<>();
// 参数验证结果
if (bindingResult.hasErrors()){
res = new ResBaseDTO<>();
res.setError(bindingResult.getFieldError().getDefaultMessage());
return res;
}
res.setSuccess();
return res;
}
}
controller实现 添加@Validated ,并增加接错误的实体类 BindingResult
@RequestMapping(path = "/process",method = RequestMethod.POST,produces = "application/json;charset=UTF-8")
@ResponseBody
public ResBaseDTO<Object> process(@Validated @RequestBody ReqDataAccessDTO reqDataAccessDTO,BindingResult bindingResult) {
log.info("process method request param is: {}", JSONObject.toJSON(reqDataAccessDTO));
ResBaseDTO<Object> res;
res = dataAccessService.process(reqDataAccessDTO);
if (res.isError()) {
log.error("数据接入!入参是:{}", JSONObject.toJSONString(reqDataAccessDTO));
return res;
}
res = dataAccessService.saveDataToDb(reqDataAccessDTO);
if (res.isError()) {
log.error("数据入库失败!入参是:{}", JSONObject.toJSONString(reqDataAccessDTO));
return res;
}
return res;
}
bean定义,增加相应的校验标签
public class ReqDataAccessDTO{
private String sql;
/**
* 存储介质,必填
*/
@NotEmpty(message = "存储介质必填")
private String storageMedium;
/**
* 宽表名,必填
*/
@NotEmpty(message = "宽表名称必填")
private String wideTableName;
}
更详细请参考https://blog.csdn.net/zlj1217/article/details/81841004
版权声明:本文为qingwufeiyang_530原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。