Validation(3)--全局参数异常校验捕获及返回XML解决
@RestControllerAdvice原创
直接上代码,后面再说怎么用
1、这个是一个Form,用来接收参数的,一个简单的NotEmpty注解校验,merchantName这个参数是必传的;
package com.cloudwalk.shark.dto.validate; import org.hibernate.validator.constraints.NotEmpty; public class AdvertQueryForm {
@NotEmpty
private String merchantName; private String merchantCode; private String clientCode; private String id; public String getMerchantName() {
return merchantName;
} public void setMerchantName(String merchantName) {
this.merchantName = merchantName;
} public String getMerchantCode() {
return merchantCode;
} public void setMerchantCode(String merchantCode) {
this.merchantCode = merchantCode;
} public String getClientCode() {
return clientCode;
} public void setClientCode(String clientCode) {
this.clientCode = clientCode;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
}
}
2、Controller中直接通过RequestBody取到参数,下面是重点@Validated
这个注解可以直接用来校验传递的参数;
package com.cloudwalk.shark.controller; import com.cloudwalk.shark.common.utils.ResponseData;
import com.cloudwalk.shark.dto.validate.AdvertQueryForm;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; @Controller
@RequestMapping(value = "/validate", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
public class SharkValidationController { @PostMapping("/bean")
@ResponseBody
public ResponseData checkBeanIsValid(@Validated @RequestBody AdvertQueryForm advertQueryForm){
return new ResponseData(true,"2","3",advertQueryForm);
}
}
直接友好的捕获了你的参数校验异常,统一的去实现了参数异常的捕获!
重点!produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}这个参数如果不设定,默认返回的就会是XML;
package com.cloudwalk.shark.config.controllerException; import com.cloudwalk.shark.common.em.GlobalCodeEnum;
import com.cloudwalk.shark.common.utils.ResponseData;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.Set; @RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public ResponseData handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) {
StringBuilder errorInfo = new StringBuilder();
BindingResult bindingResult = exception.getBindingResult();
for(int i = 0; i < bindingResult.getFieldErrors().size(); i++){
if(i > 0){
errorInfo.append(",");
}
FieldError fieldError = bindingResult.getFieldErrors().get(i);
errorInfo.append(fieldError.getField()).append(" :").append(fieldError.getDefaultMessage());
} //返回BaseResponse
ResponseData response = new ResponseData();
response.setMessage(errorInfo.toString());
response.setCode(GlobalCodeEnum.FAIL.getErrorCode());
return response;
} @ExceptionHandler(ConstraintViolationException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ResponseData<String> handleConstraintViolationException(ConstraintViolationException exception) {
StringBuilder errorInfo = new StringBuilder();
String errorMessage ; Set<ConstraintViolation<?>> violations = exception.getConstraintViolations();
for (ConstraintViolation<?> item : violations) {
errorInfo.append(item.getMessage()).append(",");
}
errorMessage = errorInfo.toString().substring(0, errorInfo.toString().length()-1); ResponseData<String> response = new ResponseData<String>();
response.setMessage(errorMessage);
response.setCode(GlobalCodeEnum.FAIL.getErrorCode());
return response;
} @ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ResponseData<String> handleDefaultException(Exception exception) { ResponseData<String> response = new ResponseData<>();
response.setMessage("其他错误");
response.setCode(GlobalCodeEnum.FAIL.getErrorCode());
return response;
}
}
Validation(3)--全局参数异常校验捕获及返回XML解决的更多相关文章
- Spring 捕捉校验参数异常并统一处理
使用 @Validated ,@Valid ,@NotBlank 之类的,请自行百度,本文着重与捕捉校验失败信息并封装返回出去 参考: https://mp.weixin.qq.com/s/EaZxY ...
- SpringBoot 全局异常拦截捕获处理
一.全局异常处理 //Result定义全局数据返回对象 package com.xiaobing.demo001.domain; public class Result { private Integ ...
- (转)springboot全局处理异常(@ControllerAdvice + @ExceptionHandler)
1.@ControllerAdvice 1.场景一 在构建RestFul的今天,我们一般会限定好返回数据的格式比如: { "code": 0, "data": ...
- Spring @ControllerAdvice @ExceptionHandler 全局处理异常
对于与数据库相关的 Spring MVC 项目,我们通常会把 事务 配置在 Service层,当数据库操作失败时让 Service 层抛出运行时异常,Spring 事物管理器就会进行回滚. 如此一来, ...
- 十四、springboot全局处理异常(@ControllerAdvice + @ExceptionHandler)
1.@ControllerAdvice 1.场景一 在构建RestFul的今天,我们一般会限定好返回数据的格式比如: { "code": 0, "data": ...
- spring mvc 全局处理异常
spring框架支持很多种全局处理异常的方式 一.Spring MVC处理异常有4种方式: (1)使用Spring-MVC提供的SimpleMappingExceptionResolver: (2)实 ...
- springmvc 全局的异常拦截处理 @ControllerAdvice注解 @ExceptionHandler
第一步: Dispatcher前端控制器的源码中 默认的 private boolean throwExceptionIfNoHandlerFound = false;说明如果没有找到匹配的执行器,不 ...
- springboot之全局处理异常封装
springboot之全局处理异常封装 简介 在项目中经常出现系统异常的情况,比如NullPointerException等等.如果默认未处理的情况下,springboot会响应默认的错误提示,这样对 ...
- WebApi安全性 参数签名校验(结合Axios使用)
接口参数签名校验,是WebApi接口服务最重要的安全防护手段之一. 结合项目中实际使用情况,介绍下前后端参数签名校验实现方案. 签名校验规则 http请求,有两种传参形式: 1.通过url传参,最常见 ...
随机推荐
- aop学习总结二------使用cglib动态代理简单实现aop功能
aop学习总结二------使用cglib动态代理简单实现aop功能 模拟业务需求: 1.拦截所有业务方法 2.判断用户是否有权限,有权限就允许用户执行业务方法,无权限不允许用户执行业务方法 (判断是 ...
- Ubuntu安装搜狗输入法笔记
1.移除ibus sudo apt-get purge ibussudo apt-get autoremove 2.安装fcitx sudo apt-get install fcitx 3.安装搜狗输 ...
- [洛谷P3941] 入阵曲
题目背景 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 入阵曲 题解在代码里. #include<iostream> #include<cstdio> #include& ...
- @P0或@P1附近有语法错误
分析:@P0指的是第一个参数附近有错误;为'@P1'指的是第二个参数附近错误语法有错误.
- Javascript学习之正则表达式详解
什么是正则表达式(regular expreSSion) 正则表达式是一个描述字符模式的对象. 可以处理更复杂的字符串 JavaScript中的正则表达式使用RegExp对象表示 正则表达式用于 ...
- AndroidPageObjectTest_TimeOutManagement.java
以下代码使用ApiDemos-debug.apk进行测试 //这个脚本用于演示PageFactory的功能:设置timeout时间. package com.saucelabs.appium; imp ...
- wav音频文件头解析
wav概述 WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(ResourceInterchange File Format)文件规范,用于保存Windows平台的音频信息 ...
- 【Selenium】跳转问题
/** * rewrite the get method, adding user defined log</BR> * 地址跳转方法,使用WebDriver原生get方法,加入失败重试的 ...
- Git学习笔记 - Git安装
Git安装(Windows) 从 https://git-for-windows.github.io/ 下载Git,下载完成,双击安装,一路选择默认设置即可. 注意:选择使用git的命令行模式,选择默 ...
- python 特殊方法之new
object.__new__(cls[, ...]) Called to create a new instance of class cls. __new__() is a static metho ...