gpt4 book ai didi

java - 确保 Web 服务处理异常并始终返回有效响应

转载 作者:行者123 更新时间:2023-11-30 04:22:40 25 4
gpt4 key购买 nike

我正在开发一个网络服务,无论如何,响应应该始终有效,我的意思是有效格式。

这意味着,如果 Web 服务预计返回与特定 XSD 架构匹配的 XML,则无论如何它都应该始终返回有效的 XML 文档。

到目前为止,我唯一的方法是做这样的事情(在 Controller 级别)

String xmlResponse = this.loadDefaultXML();
try {
xmlResponse = this.myCoolService.myCoolMethod();
} catch (Throwable t) {
xmlResponse = this.loadDefaultXML(String errorMessage)
} finally {
return xmlResponse
}

当然,lpoadDefaultXML() 将加载 xml 文档,例如:

<?xml>
<result>Ouch, there was a problem</result>

并且 loadDefaultXML(String errorMessage) 就可以了

<?xml>
<result>WHATEVER errorMessage contains</result>

当然,服务级别会处理正常的异常,不过,我认为捕获 Throwable 并使用 try-catch-finally 是确保的唯一方法无论如何,我都会掌控一切,这样我就可以始终返回 XML。

还有什么更好的想法或建议吗?

更新:

我正在使用 Spring MVC 3.2 和 JAXB 进行 xml 的编码/解码。这确实使用了 SOAP,而且我也没有为此使用 wsdl。

最佳答案

Spring MVC中,当处理请求期间抛出异常时,DispatcherServlet会查阅配置的org.springframework.web.servlet.HandlerExceptionResolver s 来处理抛出的异常。然后,解析器可以将异常转换 View 以向用户显示。

要使用它,简而言之,您可以:

  • 实现HandlerExceptionResolver接口(interface),这只是实现 resolveException(Exception, Handler) 的问题方法并返回 ModelAndView .

或者,我更喜欢:

  • 您使用 @ExceptionHandler Controller 中的方法注释用于指定在执行 Controller 方法期间引发特定类型的异常时调用哪个方法。例如:

    @Controller
    public class PersonController {

    @RequestMapping("person/{id}")
    @ResponseBody
    public Person getById(@PathVariable String id) {
    if ("007".equals(id)) {
    throw new RuntimeException("007 is a secret agent.");
    }
    return personService.getById(id);
    }

    @ExceptionHandler(RuntimeException.class) // this can be an array
    @ResponseBody
    public String handleRuntimeException(RuntimeException ex,
    HttpServletRequest request) {
    return "Oops! Something bad happened: "+ex.getMessage();
    }
    }

欲了解更多信息,请访问Web MVC framework - Handling Exceptions .

关于java - 确保 Web 服务处理异常并始终返回有效响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16640972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com