成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringMVC異常處理句柄這些細節,你知道嗎?

開發 前端
SpringMVC異常處理的基本使用,通過@ExceptionHandler注解標注方法,在上面的方法中都接受的是異常類,那這方法可以接收什么樣的參數及返回值呢?

回顧

@Controller和@ControllerAdvice類可以使用@ExceptionHandler注解標注方法來處理控制器方法的異常,如下例所示:

局部異常處理

@Controller
public class SimpleController {

// ...
// 只能處理當前SimpleController中發生的異常
@ExceptionHandler
public ResponseEntity<String> handle(Exception ex) {
// ...
}

}

全局異常處理

@RestControllerAdvice
public class TestControllerAdvice {

// 全局異常處理
@ExceptionHandler
public Object handle(Exception e) {
return "我是全局異常: " + e.getMessage() ;
}

}

指定能處理的異常類型

@ExceptionHandler({FileSystemException.class, RemoteException.class})
public ResponseEntity<String> handle(Exception ex) {
// ...
}

在@ExceptionHandler中指明能夠處理的異常類。

以上是回顧了SpringMVC異常處理的基本使用,通過@ExceptionHandler注解標注方法,在上面的方法中都接受的是異常類,那這方法可以接收什么樣的參數及返回值呢?

異常句柄參數

@ExceptionHandler方法支持以下參數:

方法參數

描述

Exception type

用于訪問引發的異常。

HandlerMethod

用于訪問引發異常的控制器方法。

WebRequest, NativeWebRequest

對請求參數、請求和會話屬性的通用訪問,而不直接使用 Servlet API。

javax.servlet.ServletRequest, javax.servlet.ServletResponse

選擇任何特定的請求或響應類型(例如,ServletRequest或HttpServletRequest或Spring的MultipartRequest或MultipartHttpServletRequest)。

javax.servlet.http.HttpSession

強制會話的存在。因此,這樣的參數永遠不會為空。注意,會話訪問不是線程安全的。如果允許多個請求并發訪問一個會話,可以考慮將RequestMappingHandlerAdapter實例的synchronizeOnSession標志設置為true。

java.security.Principal

當前已驗證的用戶-如果已知,可能是特定的Principal實現類。

HttpMethod

請求的HTTP方法。

java.util.Locale

當前請求區域設置,由可用的最特定的LocaleResolver確定——實際上是配置的LocaleResolver或LocaleContextResolver。

java.util.TimeZone, java.time.ZoneId

與當前請求關聯的時區,由LocaleContextResolver確定。

java.io.OutputStream, java.io.Writer

用于訪問由Servlet API公開的原始響應體。

java.util.Map, org.springframework.ui.Model, org.springframework.ui.ModelMap

用于訪問錯誤響應的模型。總是空的。

RedirectAttributes

指定在重定向情況下使用的屬性-(將被追加到查詢字符串中)和臨時存儲的flash屬性,直到重定向后的請求。請參見重定向屬性和Flash屬性。

@SessionAttribute

對于任何會話屬性的訪問,與作為類級@SessionAttributes聲明的結果存儲在會話中的模型屬性相反。更多細節請參見@SessionAttribute。

@RequestAttribute

用于訪問請求屬性。詳見@RequestAttribute。

異常句柄返回值

@ExceptionHandler方法支持以下返回值:

返回值

描述

@ResponseBody

返回值通過HttpMessageConverter實例轉換并寫入響應。看到@ResponseBody。

HttpEntity<B>, ResponseEntity<B>

返回值指定通過HttpMessageConverter實例轉換完整響應(包括HTTP報頭和正文)并將其寫入響應。看到ResponseEntity。

String

要用ViewResolver實現解析的視圖名稱,并與隱式模型一起使用——通過命令對象和@ModelAttribute方法確定。處理程序方法還可以通過聲明model參數(前面描述過)以編程方式豐富模型。

View

一個用于呈現隱式模型的View實例——通過命令對象和@ModelAttribute方法確定。處理程序方法還可以通過聲明model參數(前面描述過)以編程方式豐富模型。

java.util.Map, org.springframework.ui.Model

屬性被添加到隱式模型中,視圖名通過RequestToViewNameTranslator隱式確定。

@ModelAttribute

添加到模型中的屬性,通過RequestToViewNameTranslator隱式確定視圖名。

注意@ModelAttribute是可選的。請參閱該表末尾的“任何其他返回值”。

ModelAndView object

要使用的視圖和模型屬性以及(可選的)響應狀態。

void

具有void返回類型(或空返回值)的方法,如果它還具有ServletResponse、OutputStream參數或@ResponseStatus注釋,則認為它已經完全處理了響應。如果控制器已經做了一個正的ETag或lastModified時間戳檢查(詳情請參閱Controllers),同樣也是正確的。

如果以上都不為真,void返回類型也可以表示REST控制器的“無響應體”或HTML控制器的默認視圖名稱選擇。

Any other return value

如果返回值與上述任何一個都不匹配,并且不是簡單類型(由BeanUtils#isSimpleProperty決定),默認情況下,它將被視為要添加到模型中的模型屬性。如果是簡單類型,則仍未解決。

REST API異常

REST服務的一個常見需求是在響應體中包含錯誤詳細信息。Spring框架不會自動執行此操作,因為響應體中的錯誤細節表示是特定于應用程序的。但是,@RestController可以使用帶有ResponseEntity返回值的@ExceptionHandler方法來設置響應的狀態和主體。這樣的方法也可以在@ControllerAdvice類中聲明,以便全局應用它們。

在響應體中使用錯誤細節實現全局異常處理的應用程序應該考慮擴展ResponseEntityExceptionHandler,它為Spring MVC引發的異常提供處理,并提供自定義響應體的鉤子。要使用它,可以創建ResponseEntityExceptionHandler的子類,用@ControllerAdvice注釋它,重寫必要的方法,并將其聲明為Spring bean,如下:

@RestControllerAdvice
static class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

@Override
protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers,HttpStatus status, WebRequest request) {
System.out.println(">>>>>>>>>>> - body - " + body) ;
System.out.println(">>>>>>>>>>> - headers - " + headers) ;
System.out.println(">>>>>>>>>>> - status - " + status) ;
return new ResponseEntity<>(ex.getMessage(), headers, status) ;
}

}

ResponseEntityExceptionHandler類中內置了很多類型的異常處理

public abstract class ResponseEntityExceptionHandler {
@ExceptionHandler({
HttpRequestMethodNotSupportedException.class,
HttpMediaTypeNotSupportedException.class,
HttpMediaTypeNotAcceptableException.class,
MissingPathVariableException.class,
MissingServletRequestParameterException.class,
ServletRequestBindingException.class,
ConversionNotSupportedException.class,
TypeMismatchException.class,
HttpMessageNotReadableException.class,
HttpMessageNotWritableException.class,
MethodArgumentNotValidException.class,
MissingServletRequestPartException.class,
BindException.class,
NoHandlerFoundException.class,
AsyncRequestTimeoutException.class
})
@Nullable
public final ResponseEntity<Object> handleException(Exception ex, WebRequest request) throws Exception {
HttpHeaders headers = new HttpHeaders();

if (ex instanceof HttpRequestMethodNotSupportedException) {
HttpStatus status = HttpStatus.METHOD_NOT_ALLOWED;
return handleHttpRequestMethodNotSupported((HttpRequestMethodNotSupportedException) ex, headers, status, request);
}
else if (ex instanceof HttpMediaTypeNotSupportedException) {
HttpStatus status = HttpStatus.UNSUPPORTED_MEDIA_TYPE;
return handleHttpMediaTypeNotSupported((HttpMediaTypeNotSupportedException) ex, headers, status, request);
}
// ...
else {
throw ex;
}
}
}
責任編輯:武曉燕 來源: 實戰案例錦集
相關推薦

2020-10-28 11:20:55

vue項目技

2023-01-28 09:38:48

接口SpringMVC

2020-11-18 07:52:08

2020-12-24 15:26:07

Redis數據庫

2015-06-29 09:06:51

2024-02-26 08:19:00

WebSpring容器

2015-07-03 11:20:41

編程學習方法

2016-01-11 09:48:07

2021-08-05 18:21:29

Autowired代碼spring

2018-05-11 15:53:59

2024-08-09 11:07:46

緩存檢索filter

2019-02-12 11:15:15

Spring設計模式Java

2018-02-06 09:40:25

PythonOOP繼承

2018-03-07 06:37:14

開源項目源代碼云計算

2017-11-09 15:29:21

CPU溫度常識

2019-07-08 10:18:38

MPLSIP數據

2024-09-05 09:25:59

SpringUserDAO接口

2016-03-18 19:03:35

認知計算IBM

2021-11-10 15:37:49

Go源碼指令

2018-08-07 09:29:35

數據庫MySQL優化方法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 无码一区二区三区视频 | 亚洲一区二区中文字幕 | 欧美精品久久 | 99精品99久久久久久宅男 | 亚洲精品一 | 一级黄片一级毛片 | 亚洲毛片网站 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 日韩一区二区福利 | 亚州综合在线 | 精品欧美一区二区精品久久 | 日韩精品一区二区三区在线观看 | 色综合区| 国产日韩精品一区 | 9999在线视频 | 国产精品免费看 | 欧美男人天堂 | 国产精品久久久久久久久图文区 | 日本网站免费观看 | 日本成年免费网站 | 99久久精品免费看国产四区 | 一区二区中文字幕 | 伊人影院99 | 我我色综合| 91影院在线观看 | 在线看无码的免费网站 | 久久久久久久成人 | av一区二区三区四区 | 亚洲一区中文字幕在线观看 | 亚洲第一视频网 | 亚洲国产一区在线 | www.夜夜骑.com | 欧美日韩一区二区在线 | 国产激情偷乱视频一区二区三区 | 毛片网站在线观看 | 91免费看片| 日本亚洲精品成人欧美一区 | 一级黄色片免费 | 国产精品久久视频 | 久久久久久免费毛片精品 | 日韩欧美视频免费在线观看 |