欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot2.0自適應(yīng)效果錯(cuò)誤響應(yīng)過(guò)程解析

 更新時(shí)間:2019年11月26日 08:29:06   作者:if年少有為  
這篇文章主要介紹了Springboot2.0自適應(yīng)效果錯(cuò)誤響應(yīng)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Springboot2.0自適應(yīng)效果錯(cuò)誤響應(yīng)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

實(shí)現(xiàn)效果當(dāng)訪問(wèn)thymeleaf渲染頁(yè)面時(shí),顯示的是自定義的錯(cuò)誤頁(yè)面

當(dāng)以接口方式訪問(wèn)時(shí),顯示的是自定義的json數(shù)據(jù)響應(yīng)

1. 編寫(xiě)自定義異常

package cn.jfjb.crud.exception;

/**
 * @author john
 * @date 2019/11/24 - 9:48
 */
public class UserNotExistException extends RuntimeException {
  public UserNotExistException() {
    super("用戶不存在");
  }
}

2. 自定義異常處理&返回定制json數(shù)據(jù),轉(zhuǎn)發(fā)到/error進(jìn)行自適應(yīng)響應(yīng)效果處理

package cn.jfjb.crud.handler;

import cn.jfjb.crud.exception.UserNotExistException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * @author john
 * @date 2019/11/24 - 10:43
 */
@ControllerAdvice
public class MyExceptionHandler {

  @ExceptionHandler(UserNotExistException.class)
  public String handleException(Exception e, HttpServletRequest request) {
    Map<String, Object> map = new HashMap<>();
    //傳入我們自己的錯(cuò)誤狀態(tài)碼 4xx 5xx,否則就不會(huì)進(jìn)入定制錯(cuò)誤頁(yè)面的解析流程
    /**
     * Integer statusCode = (Integer) request
     .getAttribute("javax.servlet.error.status_code");
     */
    request.setAttribute("javax.servlet.error.status_code", 400);
    map.put("code", "user.notexist");
    map.put("message", e.getMessage());

    //轉(zhuǎn)發(fā)給錯(cuò)誤處理器MyErrorAttributes
    request.setAttribute("ext", map);
    //轉(zhuǎn)發(fā)到/error進(jìn)行自適應(yīng)響應(yīng)效果處理
    return "forward:/error";
  }
}

3. 定制數(shù)據(jù)攜帶出去

出現(xiàn)錯(cuò)誤以后,會(huì)來(lái)到/error請(qǐng)求,會(huì)被BasicErrorController處理,響應(yīng)出去可以獲取的數(shù)據(jù)是由getErrorAttributes得到的(是AbstractErrorController(ErrorController)規(guī)定的方法);

​ 1、完全來(lái)編寫(xiě)一個(gè)ErrorController的實(shí)現(xiàn)類【或者是編寫(xiě)AbstractErrorController的子類】,放在容器中;

​ 2、頁(yè)面上能用的數(shù)據(jù),或者是json返回能用的數(shù)據(jù)都是通過(guò)errorAttributes.getErrorAttributes得到;

​ 容器中DefaultErrorAttributes.getErrorAttributes();默認(rèn)進(jìn)行數(shù)據(jù)處理的;

自定義ErrorAttributes

package cn.jfjb.crud.component;

import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.WebRequest;

import java.util.Map;

/**
 * @author john
 * @date 2019/11/24 - 12:13
 */
@Component
public class MyErrorAttributes extends DefaultErrorAttributes {
  @Override
  public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
    Map<String, Object> map = super.getErrorAttributes(webRequest, includeStackTrace);
    //獲取自定義處理異常傳遞的參數(shù)
    Map<String, Object> ext = (Map<String, Object>) webRequest.getAttribute("ext", 0);

    map.put("company", "atguigu");
    map.put("ext", ext);
    return map;
  }
}

4. 配置application.yml

server:
error:
include-exception: true

5. 編寫(xiě)4xx.html自定義錯(cuò)誤頁(yè)面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>4xx</title>
</head>
<body>
<h1>status:[[${status}]]</h1>
<h2>timestamp:[[${timestamp}]]</h2>
<h2>exception:[[${exception}]]</h2>
<h2>message:[[${message}]]</h2>
</body>
</html>

6. 測(cè)試

package cn.jfjb.crud.controller;

import cn.jfjb.crud.exception.UserNotExistException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @author john
 * @date 2019/11/22 - 19:38
 */
@Controller
public class HelloController {
  
  @RequestMapping({"/testException"})
  public String testException(@RequestParam("user") String user) {
    if (user != "aaa") {
      throw new UserNotExistException();
    }
    return "index";
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java BigDecimal使用方法詳解

    Java BigDecimal使用方法詳解

    Java在java.math包中提供的API類BigDecimal,用來(lái)對(duì)超過(guò)16位有效位的數(shù)進(jìn)行精確的運(yùn)算。雙精度浮點(diǎn)型變量double可以處理16位有效數(shù),但在實(shí)際應(yīng)用中,可能需要對(duì)更大或者更小的數(shù)進(jìn)行運(yùn)算和處理
    2022-12-12
  • Java報(bào)錯(cuò):ClassCastException問(wèn)題解決方法

    Java報(bào)錯(cuò):ClassCastException問(wèn)題解決方法

    異常是程序中的一些錯(cuò)誤,但并不是所有的錯(cuò)誤都是異常,并且錯(cuò)誤有時(shí)候是可以避免的,下面這篇文章主要給大家介紹了關(guān)于Java報(bào)錯(cuò):ClassCastException問(wèn)題解決方法,需要的朋友可以參考下
    2024-07-07
  • ActiveMQ消息簽收機(jī)制代碼實(shí)例詳解

    ActiveMQ消息簽收機(jī)制代碼實(shí)例詳解

    這篇文章主要介紹了ActiveMQ消息簽收機(jī)制代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java中多媒體文件上傳及頁(yè)面回顯的操作代碼

    Java中多媒體文件上傳及頁(yè)面回顯的操作代碼

    這篇文章主要介紹了Java中多媒體文件上傳及頁(yè)面回顯的操作代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot前后端接口對(duì)接常見(jiàn)錯(cuò)誤小結(jié)

    SpringBoot前后端接口對(duì)接常見(jiàn)錯(cuò)誤小結(jié)

    SpringBoot前后端接口對(duì)接工作時(shí),經(jīng)常遇到請(qǐng)求500,400等問(wèn)題,本文主要介紹了SpringBoot前后端接口對(duì)接常見(jiàn)錯(cuò)誤小結(jié),感興趣的可以了解一下
    2022-01-01
  • springBoot項(xiàng)目中的全局異常處理和自定義異常處理實(shí)現(xiàn)

    springBoot項(xiàng)目中的全局異常處理和自定義異常處理實(shí)現(xiàn)

    異常是由于程序邏輯錯(cuò)誤、運(yùn)行環(huán)境問(wèn)題、用戶輸入錯(cuò)誤等原因?qū)е碌囊环N非正常的狀態(tài)或事件,本文主要介紹了springBoot項(xiàng)目中的全局異常處理和自定義異常處理實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • Java中使用JDBC操作數(shù)據(jù)庫(kù)簡(jiǎn)單實(shí)例

    Java中使用JDBC操作數(shù)據(jù)庫(kù)簡(jiǎn)單實(shí)例

    這篇文章主要介紹了Java中使用JDBC操作數(shù)據(jù)庫(kù)簡(jiǎn)單實(shí)例,本文以Mysql為例介紹使用Java JDBC操作數(shù)據(jù)庫(kù)的6個(gè)步驟,需要的朋友可以參考下
    2015-06-06
  • Maven中生命周期的具體使用

    Maven中生命周期的具體使用

    在 Maven 出現(xiàn)之前,項(xiàng)目構(gòu)建的生命周期就已經(jīng)存在,本文主要介紹了Maven中生命周期的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • 如何用java獲取指定日期是第幾周

    如何用java獲取指定日期是第幾周

    這篇文章主要給大家介紹了關(guān)于如何用java獲取指定日期是第幾周的相關(guān)資料,在開(kāi)始之前我們需要先了解如何獲取當(dāng)前日期所在的年份以及第幾周,在Java中可以使用Calendar類來(lái)獲取這些信息,需要的朋友可以參考下
    2023-09-09
  • SpringBoot開(kāi)發(fā)中使用DTO層的方法示例

    SpringBoot開(kāi)發(fā)中使用DTO層的方法示例

    DTO層是在應(yīng)用程序的業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層之間引入的一個(gè)中間層,用于在不同層之間傳輸數(shù)據(jù),本文主要介紹了SpringBoot開(kāi)發(fā)中使用DTO層,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06

最新評(píng)論