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,自定義參數異常app
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(); }