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

SpringBoot复习:(37)自定义ErrorController

所有接口统一返回的数据格式

package cn.edu.tju.domain;public class MyResponse {private int code;private String message;private String exception;private String stack;public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public String getException() {return exception;}public void setException(String exception) {this.exception = exception;}public String getStack() {return stack;}public void setStack(String stack) {this.stack = stack;}
}

自定义的ErrorController覆盖默认的BasicErrorController。当出错时,也统一返回自定义的数据格式,而不是Spring的ResponseEntity

package cn.edu.tju.controller;import cn.edu.tju.domain.MyResponse;
import org.springframework.boot.autoconfigure.web.ErrorProperties;
import org.springframework.boot.autoconfigure.web.servlet.error.AbstractErrorController;
import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
import org.springframework.boot.autoconfigure.web.servlet.error.ErrorViewResolver;
import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.servlet.error.ErrorAttributes;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Collections;
import java.util.List;
import java.util.Map;@Controller
@RequestMapping("/error")
public class MyErrorController extends AbstractErrorController {public MyErrorController(ErrorAttributes errorAttributes, List<ErrorViewResolver> errorViewResolvers) {super(errorAttributes, errorViewResolvers);}@RequestMapping(produces = MediaType.TEXT_HTML_VALUE)public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaa");HttpStatus status = getStatus(request);ErrorAttributeOptions of = ErrorAttributeOptions.of(ErrorAttributeOptions.Include.EXCEPTION,ErrorAttributeOptions.Include.MESSAGE,ErrorAttributeOptions.Include.EXCEPTION//,ErrorAttributeOptions.Include.STACK_TRACE);Map<String, Object> model = Collections.unmodifiableMap(getErrorAttributes(request, of));response.setStatus(status.value());ModelAndView modelAndView = resolveErrorView(request, response, status, model);return (modelAndView != null) ? modelAndView : new ModelAndView("error", model);}@RequestMapping@ResponseBodypublic MyResponse error(HttpServletRequest request) {HttpStatus status = getStatus(request);if (status == HttpStatus.NO_CONTENT) {MyResponse myResponse = new MyResponse();myResponse.setCode(204);return myResponse;}ErrorAttributeOptions of = ErrorAttributeOptions.of(ErrorAttributeOptions.Include.EXCEPTION,ErrorAttributeOptions.Include.MESSAGE,ErrorAttributeOptions.Include.EXCEPTION,ErrorAttributeOptions.Include.STACK_TRACE);Map<String, Object> body = getErrorAttributes(request, of);MyResponse myResponse = new MyResponse();myResponse.setCode(200);myResponse.setMessage(String.valueOf(body.get("message")));myResponse.setException(String.valueOf(body.get("exception")));myResponse.setStack(String.valueOf(body.get("trace")));//path//timestamp//errorreturn myResponse;}
}

SpringBoot默认异常处理自动配置类ErrorMvcAutoConfiguration

相关文章:

SpringBoot复习:(37)自定义ErrorController

所有接口统一返回的数据格式 package cn.edu.tju.domain;public class MyResponse {private int code;private String message;private String exception;private String stack;public int getCode() {return code;}public void setCode(int code) {this.code code;}public S…...

Linux学习之防火墙概述

防火墙分类&#xff1a; 软件防火墙&#xff1a;常用于数据包的过滤&#xff0c;比如限制某些ip或者端口&#xff0c;进行某些数据的转发或者传送 硬件防火墙&#xff1a;防御地域攻击 软件防火墙的分类&#xff1a; 包过滤防火墙&#xff1a;控制比较宽泛&#xff0c;防御效果…...

JS_围绕圆形滑动

需求&#xff1a;滑动手势最大不能超过一个半径为50的圆形&#xff0c;超出围绕圆形边线滑动 这里只提供一个思路&#xff0c;下面代码可以运行&#xff0c;但是要使用需要改成自己的参数 <div style"width: 100%;height: 100vh;display: flex;justify-content: cente…...

Ubuntu上安装RabbitMQ

在Ubuntu上安装RabbitMQ并设置管理员用户为"admin"&#xff0c;密码为"123456"&#xff0c;并开启开机自启 更新系统软件包列表。在终端中执行以下命令&#xff1a; sudo apt update安装RabbitMQ服务器软件包。运行以下命令&#xff1a; sudo apt insta…...

统计学和机器学习之间的联系和区别

一、说明 老实说&#xff0c;我厌倦了几乎每天都在社交媒体和我的大学里听到这场辩论。通常&#xff0c;这伴随着一些模糊的陈述来解释这个问题。双方都为此感到内疚。我希望在本文结束时&#xff0c;您将对这些有些模糊的术语有更明智的立场。 二、论点 与普遍的看法相反&…...

linux中profile.d和profile的区别

profile.d在profile中加载 profile文件 PATH"/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/scripts:/soc/bin:/soc/scripts" LD_LIBRARY_PATH"/usr/local/lib:/usr/lib:/opt/lib:/soc/lib" export SSL_LDPATH/usr/local/lib/ export ZLIB_LDPATH/usr/lo…...

MobaXterm sftp 不能拖拽文件夹了?

原因是我把mobaxterm设置成Windows管理员权限运行了,结果就不能拖动文件。把管理员权限去掉就恢复正常了。 原因是我把mobaxterm设置成Windows管理员权限运行了,结果就不能拖动文件。把管理员权限去掉就恢复正常了。 原因是我把mobaxterm设置成Windows管理员权限运行了,结果就不…...

【ArcGIS Pro二次开发】(59):Editing(编辑)模块

ArcGIS Pro SDK中的"Editing"&#xff08;编辑&#xff09;模块提供了一系列API和工具&#xff0c;允许开发人员在ArcGIS Pro中实现各种地图数据编辑操作&#xff0c;从简单的要素绘制到复杂的数据集编辑。 下面列举一些常用编辑工具的实现方法。 1、获取所选要素的…...

WebSocket与消息推送

B/S结构的软件项目中有时客户端需要实时的获得服务器消息&#xff0c;但默认HTTP协议只支持请求响应模式&#xff0c;这样做可以简化Web服务器&#xff0c;减少服务器的负担&#xff0c;加快响应速度&#xff0c;因为服务器不需要与客户端长时间建立一个通信链接&#xff0c;但…...

5.1 web浏览安全

数据参考&#xff1a;CISP官方 目录 Web应用基础浏览器所面临的安全威胁养成良好的Web浏览安全意识如何安全使用浏览器 一、Web应用基础 1、Web应用的基本概念 Web ( World wide Web) 也称为万维网 脱离单机Web应用在互联网上占据了及其重要的地位Web应用的发展&#xf…...

(六)Unity开发Vision Pro——词汇表

1.PolySpatial Core (com.unity.polyspatial)&#xff1a;基础 PolySpatial 包&#xff0c;初始化和所有设置从这里开始。它执行更改跟踪和处理、序列化/反序列化&#xff0c;并包括 ShaderGraph 到 MaterialX 转换器 2.PolySpatial XR (com.unity.polyspatial.xr)&#xff1a…...

算法随笔:图论问题之割点割边

割点 定义 割点的定义&#xff1a;如果一个点被删除之后会导致整个图不再是一个连通图&#xff0c;那么这个顶点就是这个图的割点。举例&#xff1a; 上图中的点2就是一个割点&#xff0c;如果它被删除&#xff0c;则整个图被分为两个连通分量&#xff0c;不再是一个连通图。…...

【虚幻引擎】UE5数字人的创建

安装插件 在插件里面找到MetaHuman&#xff0c;设置激活&#xff0c;然后重启引擎 找到bridge&#xff0c;并开启&#xff0c;这个需要我们制作完成的metahuman需要在这个插件里下载&#xff0c;unreal5自动安装 创建metahuman 首先添加一个metahuman本体&#xff0c;如果你的插…...

算法:深度优先遍历

文章目录 什么是深搜典型题目积累 本篇主要积累的是深度优先遍历算法 什么是深搜 深度优先搜索英文缩写为 DFS 即Depth First Search 其过程是对每一个可能的分支路径深入到不能再深入为止&#xff0c;而且每个节点只能访问一次 简单来说就是: 一路走到头&#xff0c;不撞墙…...

Stable Diffusion + Deform制作指南

1.安装sd以及deform插件,更新后记得重启 需要安装ffmpeg https://ffmpeg.org/download.html 选择对应版本然后安装 如果是windows需要解压后将ffmpeg的bin目录配置在电脑的环境变量里面。 2.准备一张初始开始图片 3.填写参数,这里面参数要注意,宽高一定是32的倍数。如果填写…...

ssm+vue网上花店设计源码和论文

ssmvue网上花店设计源码和论文017 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xf…...

【leetcode】第一章数组

704. 二分查找 边界值需注意left代表左边界下标值&#xff0c;right代表右边界的下标值当数组只有一个元素时&#xff0c;此时如果找到该元素应该返回下标0&#xff0c;因此条件为left<right当mid的元素值大于target时&#xff0c;此时说明我们想找的target在右边&#xff…...

01|Java中常见错误或不清楚

补充&#xff1a;length vs length() vs size() 1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性. 2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法. 3.java中的siz…...

递归的用法和例子

b站视频&#xff1a;https://www.bilibili.com/video/BV1iS4y1e7MJ/?spm_id_from333.999.0.0&vd_source1717654b9cbbc6a773c2092070686a95 # 递归的定义&#xff1a;其实就是自己调用自己&#xff0c;一般用函数的形式来进行 """ 特点&#xff1a; 1、一定…...

极狐GitLab 企业级 CI/CD 规模化落地实践指南(一)

目录 template 引用&#xff0c;减少代码冗余&#xff0c;增强 CI/CD 构建扩展性 问题 1&#xff1a;代码冗余&#xff0c;低效实践 问题 2&#xff1a;维护性难&#xff0c;工作量大 ➤ local ➤ file ➤ remote ➤ template 收益 1&#xff1a;一处修改&#xff0c;多…...

魔兽争霸III终极增强方案:WarcraftHelper完整配置与优化指南

魔兽争霸III终极增强方案&#xff1a;WarcraftHelper完整配置与优化指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典魔兽争霸III在现代…...

Windows驱动管理神器:Driver Store Explorer完整使用教程与系统优化指南

Windows驱动管理神器&#xff1a;Driver Store Explorer完整使用教程与系统优化指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾经因为Windows系统驱动问题而烦恼&#xff…...

碧蓝航线Alas自动化脚本:解放双手的终极游戏助手

碧蓝航线Alas自动化脚本&#xff1a;解放双手的终极游戏助手 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 你是否厌倦了每…...

Burp Suite Galaxy插件实战:上下文感知解密中枢搭建指南

1. 为什么Galaxy插件不是“又一个加解密工具”&#xff0c;而是Burp生态里真正能落地的解密中枢 你有没有遇到过这样的场景&#xff1a;在Burp Suite里抓到一串密文&#xff0c;比如 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... &#xff0c;第一反应是复制进JWT.io——结果发现…...

Color与Linear Color

简单来说&#xff1a;Color 是给“人眼”看的颜色&#xff0c;而 Linear Color 是给“电脑&#xff08;引擎&#xff09;”算的纯粹数据。在虚幻引擎&#xff08;以及所有现代 3D 渲染引擎&#xff09;中&#xff0c;区分这两者是非常核心的图形学概念。下面是它们具体的区别&a…...

机器学习势能面在肽分子模拟中的应用:从原理到实践

1. 项目概述&#xff1a;当机器学习“学会”了量子化学&#xff0c;肽的微观世界如何被重新描绘&#xff1f;在计算化学和生物物理领域&#xff0c;分子动力学模拟是我们窥探分子微观运动的核心“显微镜”。它的原理很简单&#xff1a;给定一个描述所有原子之间相互作用力的“规…...

基于Spring Boot的高性能分布式定时任务调度系统架构设计与实现原理

基于Spring Boot的高性能分布式定时任务调度系统架构设计与实现原理 【免费下载链接】campus-imaotai i茅台app自动预约&#xff0c;每日自动预约&#xff0c;支持docker一键部署&#xff08;本项目不提供成品&#xff0c;使用的是已淘汰的算法&#xff09; 项目地址: https:…...

K6压测脚本实战:从玩具到生产级性能验证手术刀

1. 为什么你写的“压测脚本”从来跑不出真实瓶颈&#xff1f; 上周帮一个做 SaaS 后台的团队复盘线上服务抖动问题&#xff0c;他们很笃定地说&#xff1a;“我们做过压测&#xff0c;QPS 5000 没问题。”我问&#xff1a;“用什么工具&#xff1f;脚本怎么写的&#xff1f;”对…...

终极AI编舞师:5分钟让音乐自动生成3D舞蹈的完整指南

终极AI编舞师&#xff1a;5分钟让音乐自动生成3D舞蹈的完整指南 【免费下载链接】mint Multi-modal Content Creation Model Training Infrastructure including the FACT model (AI Choreographer) implementation. 项目地址: https://gitcode.com/gh_mirrors/mint20/mint …...

Unity 2D游戏地图制作:从零上手Tile Palette的7个核心工具(附快捷键清单)

Unity 2D游戏地图制作&#xff1a;从零上手Tile Palette的7个核心工具&#xff08;附快捷键清单&#xff09;在独立游戏开发领域&#xff0c;2D游戏因其独特的艺术风格和相对较低的开发门槛&#xff0c;始终保持着旺盛的生命力。无论是复古风格的平台跳跃游戏&#xff0c;还是精…...