日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RESTEasy教程第3部分:异常处理

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RESTEasy教程第3部分:异常处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在開發軟件應用程序時,異常處理是顯而易見的要求。 如果在處理用戶請求時發生任何錯誤,我們應該向用戶顯示一個錯誤頁面,其中包含詳細的異常消息,錯誤代碼(可選),更正輸入和重試的提示(可選)以及實際根本原因(可選)等詳細信息。 這也適用于RESTful Web服務。

但是,將try-catch-finally塊放在所有代碼中并不是一個好習慣。 我們應該以這樣一種方式設計/編碼,如果發生任何不可恢復的錯誤,那么代碼應該拋出該異常,并且應該有一個異常處理程序來捕獲這些異常并提取錯誤詳細信息,并對所有錯誤給出正確的錯誤響應錯誤詳細信息。

RESTEasy提供了這樣的ExceptionHandler機制,該機制簡化了ExceptionHandling過程。

在這一部分中,我將向您展示如何使用RESTEasy的ExceptionHandlers處理異常。

步驟#1:創建應用程序特定的異常。

*** ResourceNotFoundException.java*package com.sivalabs.resteasydemo;public class ResourceNotFoundException extends RuntimeException{private static final long serialVersionUID = 1L;public ResourceNotFoundException(String msg){super(msg);}}*** ApplicationException.java*package com.sivalabs.resteasydemo;import java.io.PrintWriter;import java.io.StringWriter;public class ApplicationException extends RuntimeException{private static final long serialVersionUID = 1L;public ApplicationException(){super();}public ApplicationException(String message, Throwable cause){super(message, cause);}public ApplicationException(Throwable cause){super(cause);}public ApplicationException(String msg){super(msg);}public String getInternalErrorMessage(){Throwable cause = this.getCause();if(cause != null){StringWriter sw = new StringWriter();PrintWriter pw = new PrintWriter(sw);cause.printStackTrace(pw);return sw.toString();}return null;}}

步驟2:通過實現ExceptionMapper接口創建ExceptionHandlers。

*** ResourceNotFoundExceptionHandler.java*package com.sivalabs.resteasydemo;import javax.ws.rs.core.Response;import javax.ws.rs.ext.ExceptionMapper;import javax.ws.rs.ext.Provider;import org.springframework.stereotype.Component;@Provider@Componentpublic class ResourceNotFoundExceptionHandler implements ExceptionMapper<ResourceNotFoundException>{@Overridepublic Response toResponse(ResourceNotFoundException ex)For simplicity I am preparing error xml by hand.Ideally we should create an ErrorResponse class to hold the error info.String msg = ex.getMessage();StringBuilder response = new StringBuilder('<response>');response.append('<status>failed<status>');response.append('<message>'+msg+'<message>');response.append('<response>');return Response.serverError().entity(response.toString()).build();}}*** ApplicationExceptionHandler.java*package com.sivalabs.resteasydemo;import javax.ws.rs.core.Response;import javax.ws.rs.ext.ExceptionMapper;import javax.ws.rs.ext.Provider;import org.springframework.stereotype.Component;@Provider@Componentpublic class ApplicationExceptionHandler implements ExceptionMapper<ApplicationException>{@Overridepublic Response toResponse(ApplicationException ex){For simplicity I am preparing error xml by hand.Ideally we should create an ErrorResponse class to hold the error info.String msg = ex.getMessage();String internalError = ex.getInternalErrorMessage();StringBuilder response = new StringBuilder('<response>');response.append('<status>failed<status>');response.append('<message>'+msg+'<message>');response.append('<internalError>'+internalError+'<internalError>');response.append('<response>');return Response.serverError().entity(response.toString()).build();}}

步驟#3:更新UserResource.getUserXMLById()方法以驗證用戶輸入并引發相應的異常

@Path('{id}')@GETpublic Response getUserXMLById(@PathParam('id') Integer id) {if(id==null || id < 1 ){throw new ApplicationException('User Id['+id+'] should not be less than 1.');}User user = userService.getById(id);if(user==null ){throw new ResourceNotFoundException('No User found with Id :['+id+']');}return Response.ok(user).build();}

步驟4:通過發出以下請求,測試UserResource.getUserXMLById()服務方法。

case 1 : GET http:localhost:8080resteasy-demorestusers0Response :<response><status>failed<status><message>User Id[0] should not be less than 1.<message><internalError>null<internalError><response>case 2: GET http:localhost:8080resteasy-demorestusers100Response :<response><status>failed<status><message>No User found with Id :[100]<message><response>

重要注意事項:

在Spring創建必要的對象時,我們應該讓Spring知道@Provider類,以使它們在RESTEasy中注冊。 我們可以通過兩種方式做到這一點。

a)使用@Component注釋提供程序類

b)使用組件掃描的包含過濾器。
<context:component-scan base-package ='com.sivalabs.springdemo'>
<context:include-filter expression ='javax.ws.rs.ext.Provider'type ='annotation'/> </ context:component-scan>

RESTEasy教程系列

RESTEasy教程第1部分:基礎

RESTEasy教程第2部分:Spring集成

RESTEasy教程第3部分–異常處理

參考: RESTEasy教程第3部分–來自我們的JCG合作伙伴 Siva Reddy的“ 異常處理” ,位于“ 技術上的我的實驗”博客上。


翻譯自: https://www.javacodegeeks.com/2012/06/resteasy-tutorial-part-3-exception.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的RESTEasy教程第3部分:异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。