RESTEasy教程第3部分:异常处理
但是,將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部分:异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路由器局域网无线设置篇路由器如何设置局域
- 下一篇: 在Grails 2.0中使用Servle