当前位置: 首页 > news >正文

SpringCloud SpringBoot mybatis分布式微服务云架构返回JSON格式

在上述例子中,通过@ControllerAdvice统一定义不同Exception映射到不同错误处理页面。而当我们要实现RESTful API时,返回的错误是JSON格式的数据,而不是HTML页面,这时候我们也能轻松支持。

本质上,只需在@ExceptionHandler之后加入@ResponseBody,就能让处理函数return的内容转换为JSON格式。

下面以一个具体示例来实现返回JSON格式的异常处理。

  • 创建统一的JSON返回对象,code:消息类型,message:消息内容,url:请求的url,data:请求返回的数据
public class ErrorInfo<T> {
 
    public static final Integer OK = 0;
    public static final Integer ERROR = 100;
 
    private Integer code;
    private String message;
    private String url;
    private T data;
 
    // 省略getter和setter
 
}
复制代码

创建一个自定义异常,用来实验捕获该异常,并返回json

public class MyException extends Exception {
 
    public MyException(String message) {
        super(message);
    }
    
}
复制代码

Controller中增加json映射,抛出MyException异常

@Controller
public class HelloController {
 
    @RequestMapping("/json")
    public String json() throws MyException {
        throw new MyException("发生错误2");
    }
 
}
复制代码

MyException异常创建对应的处理

@ControllerAdvice
public class GlobalExceptionHandler {
 
    @ExceptionHandler(value = MyException.class)
    @ResponseBody
    public ErrorInfo<String> jsonErrorHandler(HttpServletRequest req, MyException e) throws Exception {
        ErrorInfo<String> r = new ErrorInfo<>();
        r.setMessage(e.getMessage());
        r.setCode(ErrorInfo.ERROR);
        r.setData("Some Data");
        r.setUrl(req.getRequestURL().toString());
        return r;
    }
 
}
复制代码

启动应用,访问:http://localhost:8080/json,可以得到如下返回内容:

{
    code: 100,
    data: "Some Data",
    message: "发生错误2",
    url: "http://localhost:8080/json"
}
复制代码

至此,已完成在Spring Boot中创建统一的异常处理,实际实现还是依靠Spring MVC的注解,更多更深入的使用可参考Spring MVC的文档。

Spring Cloud大型企业分布式微服务云架构源码请加企鹅求求:一七九一七四三三八零


转载于:https://juejin.im/post/5c9091fb6fb9a0710d65cb97

相关文章:

  • node.js学习笔记
  • leetCode笔记--(1)
  • 致学习java同学奔三的90后:蹦最嗨的深夜迪,喝着啤酒配枸杞。
  • Exchange 2010/2016服务器远程重启命令
  • JVM的类加载机制
  • 一分钟带你弄懂闭包
  • 自建Kubernetes的LoadBalancer类型服务方案-MetalLB
  • global.min.css 页面通用样式
  • 腾讯服务大规模宕机:系上海网络运营商光纤故障
  • linux关闭防火墙
  • 红米Note 7 Pro在印度首销迅速售罄
  • JUNIPER MX DHCP 实验1.0
  • 图解梯度下降背后的数学原理
  • CentOS 6.9下PXE+Kickstart无人值守安装操作系统附常见问题
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • JavaScript 基础知识 - 入门篇(一)
  • Java-详解HashMap
  • java正则表式的使用
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • python学习笔记 - ThreadLocal
  • Webpack 4x 之路 ( 四 )
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前嗅ForeSpider采集配置界面介绍
  • 软件开发学习的5大技巧,你知道吗?
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 学习HTTP相关知识笔记
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 正则学习笔记
  • FaaS 的简单实践
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​决定德拉瓦州地区版图的关键历史事件
  • # .NET Framework中使用命名管道进行进程间通信
  • #include
  • #Lua:Lua调用C++生成的DLL库
  • #Z2294. 打印树的直径
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (C语言)fread与fwrite详解
  • (ros//EnvironmentVariables)ros环境变量
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .NET : 在VS2008中计算代码度量值
  • .net 4.0发布后不能正常显示图片问题
  • .NET Core中Emit的使用
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .Net中的集合
  • @RunWith注解作用
  • [android] 练习PopupWindow实现对话框
  • [Android]How to use FFmpeg to decode Android f...