首页 技术 正文
技术 2022年11月23日
0 收藏 377 点赞 3,354 浏览 7123 个字

   项目用到了springboot,本来很高兴,但是项目里什么东西都没有,验证,全局异常这些都需要自己区配置。最近springboot用的还是蛮多的,我还是做事情,把经验发表一下.全局统一的异常,首先异常的返回值和正常返回的返回值应该统一json.返回值的code和msg可以用enum保存起来,controller层的方法抛出异常.下面看代码.

package com.lianrong.system.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;import com.lianrong.system.constants.MessageConstant;
import com.lianrong.system.base.SimpleServiceResult;
import com.lianrong.system.exception.ServiceException;@ControllerAdvice
public class AdviceController {
private static final Logger logger = LoggerFactory.getLogger(AdviceController.class); @ExceptionHandler(ServiceException.class)
@ResponseBody
public SimpleServiceResult handlerException(ServiceException e) {
logger.warn("预知异常", e);
//SimpleServiceResult jsonResult = new SimpleServiceResult();
//jsonResult.setStatus(false);
//jsonResult.addMsg(MessageConstant.E0000_9999, e.getMessage());
return SimpleServiceResult.error500(e.getMessage());
} @ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseBody
@ResponseStatus(value= HttpStatus.BAD_REQUEST)
public SimpleServiceResult handlerException(HttpMessageNotReadableException e) {
logger.error("服务器未能理解请求!", e);
//SimpleServiceResult jsonResult = new SimpleServiceResult();
//jsonResult.setStatus(false);
//jsonResult.addMsg(MessageConstant.E0000_0502, "服务器未能理解请求!");
return SimpleServiceResult.error500("服务器未能理解请求!");
} @ExceptionHandler(Exception.class)
@ResponseBody
public SimpleServiceResult handlerException(Exception e) {
logger.error("运行时异常", e);
//SimpleServiceResult jsonResult = new SimpleServiceResult();
//jsonResult.setStatus(false);
//jsonResult.addMsg(MessageConstant.E0000_9999, "运行时异常");
return SimpleServiceResult.error500("运行时异常");
}
}
package com.lianrong.system.exception;public class ServiceException extends  RuntimeException {    private static final long serialVersionUID = 1L;    public ServiceException(String message) {
super(message);
}
}
package com.imooc.shoptest001.handle;import com.imooc.shoptest001.utils.JsonData;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;/**
* 全局异常捕获
*/
@ControllerAdvice
public class ExceptionHandle { /**
* ExceptionHandler 捕获什么异常
* ResponseBody 返回json格式
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public JsonData handle(Exception ex){
ex.printStackTrace();
System.out.println(ex.toString());
return JsonData.error500(ex.getMessage());
}
}
package com.imooc.shoptest001.utils;public enum JsonDataEnum {
ERROR(-,"失败"),
SUCCESS(,"成功"),
;
private Integer code; private String msg; JsonDataEnum(Integer code,String msg){
this.code = code;
this.msg = msg;
} public Integer getCode() {
return code;
} public String getMsg() {
return msg;
}
}
package com.imooc.shoptest001.utils;/**
* 前台返回json类
*/
public class JsonData<T> {
/**
* 返回状态
*/
private boolean status;
/**
* 错误码/正确码
*/
private Integer code;
/**
* 消息.
*/
private String msg;
/**
* 具体的内容.
*/
private T data; public static JsonData success(String msg,Object data){
JsonData jsonData = new JsonData();
jsonData.setMsg(msg);
jsonData.setStatus(true);
jsonData.setCode();
jsonData.setData(data);
return jsonData;
} public static JsonData ok(){
JsonData jsonData = new JsonData();
jsonData.setStatus(true);
jsonData.setCode();
return jsonData;
} public static JsonData error(Integer code,String msg){
JsonData jsonData = new JsonData();
jsonData.setStatus(false);
jsonData.setCode(code);
jsonData.setMsg(msg);
return jsonData;
} public static JsonData error500(String msg){
JsonData jsonData = new JsonData();
jsonData.setStatus(false);
jsonData.setCode();
jsonData.setMsg(msg);
return jsonData;
} public boolean isStatus() {
return status;
} public void setStatus(boolean status) {
this.status = status;
} public Integer getCode() {
return code;
} public void setCode(Integer code) {
this.code = code;
} public String getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
} public T getData() {
return data;
} public void setData(T data) {
this.data = data;
}
}

另外自己写了一个jsonData返回类

package com.lianrong.system.base;import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;/**
* 返回json的工具类.
*/
public class JsonData implements Serializable { private static final long serialVersionUID = -1140504575505840707L;
/**
* 请求结果正不正常.
*/
private boolean status;
/**
* 消息.
*/
private String msg;
/**
* 返回码
*/
private int code;
/**
* 数据:
*/
private Object data; public JsonData(boolean status){
this.status = status;
} public JsonData(boolean status,int code){
this.status = status;
} public static JsonData success(Object object,String msg){
JsonData jsondata = new JsonData(true);
jsondata.data = object;
jsondata.code = ;
jsondata.msg = msg;
return jsondata;
} public static JsonData success(Object object){
JsonData jsondata = new JsonData(true);
jsondata.data = object;
jsondata.code = ;
return jsondata;
} public static JsonData success(){
return new JsonData(true,);
} public static JsonData error(String msg){
JsonData jsondata = new JsonData(false);
jsondata.msg = msg;
return jsondata;
} public static JsonData error500(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",请求未完成。服务器遇到不可预知的情况。";
return jsondata;
} public static JsonData error501(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",请求未完成。服务器不支持所请求的功能。";
return jsondata;
} public static JsonData error502(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",请求未完成。服务器从上游服务器收到一个无效的响应。";
return jsondata;
} public static JsonData error503(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",请求未完成。服务器临时过载或当机。";
return jsondata;
} public static JsonData error504(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",网关超时。";
return jsondata;
} public static JsonData error401(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",被请求的页面需要用户名和密码。";
return jsondata;
} public static JsonData error402(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",此代码尚无法使用。";
return jsondata;
} public static JsonData error403(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",对被请求页面的访问被禁止。";
return jsondata;
} public static JsonData error404(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",服务器无法找到被请求的页面。";
return jsondata;
} public static JsonData error406(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",服务器生成的响应无法被客户端所接受。";
return jsondata;
} public static JsonData error505(String msg){
JsonData jsondata = new JsonData(false);
jsondata.code = ;
jsondata.msg = msg+",服务器不支持请求中指明的HTTP协议版本。";
return jsondata;
} public String getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
} public Object getData() {
return data;
} public void setData(Object data) {
this.data = data;
} public boolean isStatus() {
return status;
} public void setStatus(boolean status) {
this.status = status;
} public int getCode() {
return code;
} public void setCode(int code) {
this.code = code;
} public Map<String,Object> toMap(){
HashMap<String,Object> result = new HashMap<String,Object>();
result.put("status",status);
result.put("msg",msg);
result.put("code",code);
result.put("data",data);
return result;
}}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,183
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,644
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,488
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,260
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,897
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,062