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

Spring Cloud Spring Boot mybatis分布式微服务云架构 返回JSON格式

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在上述例子中,通过@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的文档。完整项目的源码来源 技术支持1791743380

转载于:https://my.oschina.net/u/3826344/blog/1842564

相关文章:

  • 常用命令参考
  • HongCMS 审计学习
  • Mastering KVM Virtualization:第二章 KVM内部原理
  • .bat文件调用java类的main方法
  • docify文档服务器搭建
  • Shell中重定向lt;lt;EOF注意事项
  • C#笔记
  • 第三章 图像的几何变换
  • asp.net给文件分配自己主动编号,如【20140710-1】
  • Python入门经典 以解决计算问题为导向的Python编程 待完好
  • Linuxshell编程
  • 华硕笔记本BIOS设置详解
  • Apache Kafka源码剖析:第7篇 日志存储系列2-FileMessageSet
  • Linux常见命令总结
  • 作用域
  • Koa2 之文件上传下载
  • Laravel 菜鸟晋级之路
  • MQ框架的比较
  • PAT A1017 优先队列
  • Python学习之路16-使用API
  • 阿里云前端周刊 - 第 26 期
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 使用agvtool更改app version/build
  • 再次简单明了总结flex布局,一看就懂...
  • 1.Ext JS 建立web开发工程
  • Mac 上flink的安装与启动
  • 选择阿里云数据库HBase版十大理由
  • ​Spring Boot 分片上传文件
  • # C++之functional库用法整理
  • # 透过事物看本质的能力怎么培养?
  • #微信小程序(布局、渲染层基础知识)
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (4) PIVOT 和 UPIVOT 的使用
  • (C++)八皇后问题
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (python)数据结构---字典
  • (多级缓存)多级缓存
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (四)模仿学习-完成后台管理页面查询
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .md即markdown文件的基本常用编写语法
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net 知识杂记
  • // an array of int
  • @SpringBootApplication 包含的三个注解及其含义