定制错误数据|学习笔记

简介: 快速学习定制错误数据

开发者学堂课程【SpringBoot快速掌握 - 核心技术定制错误数据】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/612/detail/9257


定制错误数据


一、 如何定制错误的页面

1、有模板引擎的情况

error/状态码;【将错误页面命名为 错误状态码.html放在模板引擎文件夹里面的error文件夹下】,发生状态码的错误就会来到对应的页面。

示例:

image.png

在模板引擎文件夹下面或者静态文件下,来放一个error文件夹,在error里面放上错误状态码,这个页面就是定制的错误页面。且能在里面取出相关的错误信息。

 

二、定制错误数据的操作

1、首先来先写一个异常

image.png

packge com.atguigu.springboot.exception;

public class UserNotExisException extends RuntimeException//为了异常能够抛出去,让它来继承运行时异常

{

public UserNotExistException()//无参构造器

{

super(用户不存在”)

}

}

定义controller

@ResponseBody

@RequestMapping("/hello")

浏览器地址输localhost:8080/crud/hello?user=aaa,就会来到controller并抛出UserNotExistException异常。 image.png

定义处理UserNotExistException的controller

MyExceptionHandler.java

@ResponseBody

@ExceptionHandler(UserNotExistException.class)

public Map<String, Object>

handleException(Exception e){

Map<String, Object> map = new HashMap<>();

map.put("code", "user.notexist");

map.put("message", e.getMessage());

return map;

} 

定制错误数据code以及message。方法返回值的类型是json。这样的定制错误数据,浏览器或客户端返回的都是json类数据。

public String hello(@RequestParam("user")String user){

if(user.equals("aaa")){

throw new UserNotExistException();

}

return "hello world!";

}

package com.atguigu.springboot.controller;

import com.atguigu.springboot.exception.UserNotExistExcepetion;

import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;

import java.util.Map;

在错误页面获取某些错误信息

<h1>status:[[ ${status} ]]</h1>

<h2>timestamp:[[ ${timestamp} ]]</h2>

<h2>exception:[[ ${exception} ]]</h2>

<h2>message:[[ ${message} ]]</h2>

如何响应出自己的json数据;

1. 接下来写一个异常处理器

image.png

Pcakage com.atguigu.springboot.controller; 

Import org. springframework. web.bind. annotation. contreraadvices;

@ControllerAdvice

public class MyExceptionHandler{

//浏览器的返回的都是json

@ResponseBody

@ExceptionHandler(UserNotExisException.class)//处理异常

public Map<String,Object> handleException(Exception e){

Map<String,Object> map = new HashMap<>();

map.put(“code”,”user.notexist”);//放入自己的状态码

map.put(“message”,e.getMessage());//放入异常消息

return map;//返回json数据

}

}

//没有自适应效果如果是浏览器访问则返回页面,如果是其他客户端返回json数据

2.转发到/error进行自适应响应效果处理

@ExceptionHandler(UserNotExistException.class)

public String handleException(Exception e,HttpServleRequest request){

Map<String,Object> map = new HashMap<>();

//传入自己的错误代码 4xx 5xx,否则不会进入定制错误页面的解析流程

/**

*Integer statuCode = (Integer) request

.getAttribute(“javax.servlet.error.status_code”);

*/

request.setAttribute(“javax.servlet.error.status_code”,500);

map.put(“code,”user.notexist);

map.put(“message”,e.getHessage());

//转发到/error

return “forward;//error”;

}

改进定制错误数据-自适应:

只需将controller方法的返回值改成返回到/error,相当于发送了error请求,这样BasicErrorController就会根据Request Headers请求头的Accept属性决定发送哪种类型的错误视图,是发json数据,还是发text/html数据。

3.将我们的定制数据携带出去;

出现错误以后,会来到/error请求,会被basiccontroller处理,响应出去的数据是由geterrorattributes得到的(AbstracErrorController(ErrorController)规定的方法);

(1)完全来编写一个ErrorController的实现类【或者试编写AbstractErrorController的子类】,放在容器中;

(2)页面上能用的数据,或者是json返回能用的数据都是通过errorAtrributes.getErrorAttributes得到;

示例:

//给容器中加入我们自己定义的错误属性

@component

Public class MyerrorAttributes extends DefaultErrorAttributus{

@override

Public map<string,object>getErrorAttributes(RequestAttributes requestAttributes,boolean includeStackTrace);

Super.getErrorAttributes(requestAttributes,includeStackTrace);

Return

Super.getErrorAttributes(requestAttributes,includeStackTrace)

(3)自定义ErrorAttributus

@component

Public class MyerrorAttributes extends DefaultErrorAttributus{

//返回值的map就是页面和json能获取的所有字段

@override

Public map<string,object>getErrorAttributes(RequestAttributes requestAttributes,boolean includeStackTrace);

{

Map<string,object>map= super.getErrorAttributes(requestAttributes,includeStackTrace)

Map.put(company,atguigu);

//我们的异常处理器携带的数据

Map<string,object>ext=rquestAttributes.getAttribute(name:ext,scope:0);//我们从请求域中获取一个属性。这个方法要传两个参数,传入0就是代表从request域中。

Map.put(ext,ext);//放进整个要返回的map中

Return map;

}

最终的效果:响应是自适应的,可以通过定制ErrorAttributes改变需要返回的内容

相关文章
|
10月前
|
人工智能 搜索推荐 安全
数百名研发人员用通义灵码,33%新增代码由AI生成,信也科技研发模式焕新升级
目前,信也科技数百名研发人员正在使用通义灵码,周活跃用户占比70%,新增代码中有33%由通义灵码编写,整体研发效率提升了11%,真正实现了数百研发人员开发效能的全面提升。
|
机器学习/深度学习 算法 数据可视化
【机器学习】机器学习中的人工神经元模型有哪些?
本文概述了多种人工神经元模型,包括线性神经元、非线性神经元、自适应线性神经元(ADALINE)、感知机神经元、McCulloch-Pitts神经元、径向基函数神经元(RBF)、径向基概率神经元(RBPNN)、模糊神经元、自组织映射神经元(SOM)、CMAC神经元、LIF神经元、Izhikevich神经元、Spiking神经元、Swish神经元和Boltzmann神经元,各自的特点和应用领域,为理解神经网络中神经元的多样性和适应性提供了基础。
520 4
|
C++ C语言 Linux
Visual Studio Code编写C/C++代码常见问题
我会把一些常见问题以及自己编写代码过程中遇到的问题以及解决方案放在这里,各位若是遇到的问题也可以在评论区留言。 一、头文件Error 不会影响编译运行,但会报Warm,如下图 解决方案是安装Include Autocomplete扩展。
2847 0
|
SQL 存储 Oracle
MySQL: 与only_full_group_by模式不兼容的两个解决办法
MySQL: 与only_full_group_by模式不兼容的两个解决办法
MySQL: 与only_full_group_by模式不兼容的两个解决办法
|
Web App开发 Java Maven
Eclipse+Maven创建webapp项目
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。
637 0
|
11天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
10天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
359 131
|
10天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
443 131
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话