网站建设实训的认识,广东广州重大新闻,wordpress excerpt,宁波建设工程学校网站在开发软件应用程序时#xff0c;异常处理是显而易见的要求。 如果在处理用户请求时发生任何错误#xff0c;我们应该向用户显示一个错误页面#xff0c;其中包含详细的异常消息#xff0c;错误代码#xff08;可选#xff09;#xff0c;更正输入和重试的提示#xff… 在开发软件应用程序时异常处理是显而易见的要求。 如果在处理用户请求时发生任何错误我们应该向用户显示一个错误页面其中包含详细的异常消息错误代码可选更正输入和重试的提示可选以及实际根本原因可选等详细信息。 这也适用于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;ProviderComponentpublic class ResourceNotFoundExceptionHandler implements ExceptionMapperResourceNotFoundException{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(statusfailedstatus);response.append(messagemsgmessage);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;ProviderComponentpublic class ApplicationExceptionHandler implements ExceptionMapperApplicationException{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(statusfailedstatus);response.append(messagemsgmessage);response.append(internalErrorinternalErrorinternalError);response.append(response);return Response.serverError().entity(response.toString()).build();}} 步骤3更新UserResource.getUserXMLById方法以验证用户输入并引发相应的异常 。 Path({id})GETpublic Response getUserXMLById(PathParam(id) Integer id) {if(idnull || id 1 ){throw new ApplicationException(User Id[id] should not be less than 1.);}User user userService.getById(id);if(usernull ){throw new ResourceNotFoundException(No User found with Id :[id]);}return Response.ok(user).build();} 步骤4通过发出以下请求测试UserResource.getUserXMLById服务方法。 case 1 : GET http:localhost:8080resteasy-demorestusers0Response :responsestatusfailedstatusmessageUser Id[0] should not be less than 1.messageinternalErrornullinternalErrorresponsecase 2: GET http:localhost:8080resteasy-demorestusers100Response :responsestatusfailedstatusmessageNo User found with Id :[100]messageresponse 重要注意事项 在Spring创建必要的对象时我们应该让Spring知道Provider类以使它们在RESTEasy中注册。 我们可以通过两种方式做到这一点。 a使用Component注释提供程序类 b使用组件扫描的包含过滤器。 contextcomponent-scan base-package com.sivalabs.springdemo contextinclude-filter expression javax.ws.rs.ext.Providertype annotation/ / contextcomponent-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