主题 : Spring REST 异常处理

UID: 9964
级别: 恶魔城城主
精华: 0
发帖: 118453
灵魂: 0 颗
水晶: 483 颗
贡献石: 17166 颗
警告石: 2 颗
好评石: 190221 颗
信誉石: 2 颗
技术分: 29462 分
活跃分: 318 分
社团: 『寂寞ˇ 党』
银行水晶总资产: 1 颗
在线时间: 20814(小时)
注册时间: 2010-05-02
最后登录: 2017-01-17
楼主  发表于: 2015-06-19 17:43

Spring REST 异常处理

分享到:

在上一篇中写到了Spring MVC的异常处理【见 http://www.linuxhttp://idc.myhack58.com/.com/Linux/2015-06/119049.htm】,SpringMVC捕获到异常之后会转到相应的错误页面,但是我们REST API ,一般只返回结果和状态码,比如发生异常,只向客户端返回一个500的状态码,和一个错误消息。如果我们不做处理,客户端通过REST API访问,发生异常的话,会得到一个错误页面的html代码。。。这时候怎么做呢, 我现在所知道的就两种做法

通过ResponseEntity
通过ResponseEntity接收两个参数,一个是对象,一个是HttpStatus.
举例:

@RequestMapping(value="/customer/{id}" )
public ResponseEntity<Customer> getCustomerById(@PathVariable String id)
{
    Customer customer;
    try
    {
        customer = customerService.getCustomerDetail(id);
    }
    catch (CustomerNotFoundException e)
    {
        return new ResponseEntity<Customer>(HttpStatus.NOT_FOUND);
    }
    
    return new ResponseEntity<Customer>(customer,HttpStatus.OK);
    }这种方法的话我们得在每个RequestMapping 方法中加入try catch语句块,比较麻烦,下面介绍个更简单点的方法

通过ExceptionHandler注解
这里跟前面不同的是,我们注解方法的返回值不是一个ResponseEntity对象,而不是跳转的页面。

@RequestMapping(value="/customer/{id}" )
@ResponseBody
public Customer getCustomerById(@PathVariable String id) throws CustomerNotFoundException
{
    return customerService.getCustomerDetail(id);
}@ExceptionHandler(CustomerNotFoundException.class)
public ResponseEntity<ClientErrorInformation> rulesForCustomerNotFound(HttpServletRequest req, Exception e)
{
    ClientErrorInformation error = new ClientErrorInformation(e.toString(), req.getRequestURI());
    return new ResponseEntity<ClientErrorInformation>(error, HttpStatus.NOT_FOUND);
    
}总结:
这里两种方法,推荐使用第二种,我们既可以在单个Controller中定义,也可以在标有ControllerAdvice注解的类中定义从而使异常处理对整个程序有效。


来自:   顶端
UID: 533850
级别: 论坛游民
精华: 0
发帖: 81
灵魂: 0 颗
水晶: 0 颗
贡献石: 0 颗
警告石: 0 颗
好评石: 0 颗
信誉石: 0 颗
技术分: 2 分
活跃分: 0 分
银行水晶总资产: 0 颗
在线时间: 28(小时)
注册时间: 2016-11-01
最后登录: 2017-01-17
1楼  发表于: 2017-01-11 16:47

摇钱树网管软件一次注册,终身使用,免去月月付费的麻烦,价格更实惠,24小时免费技术支持,让网吧无任何后顾之忧
来自:   顶端
UID: 533850
级别: 论坛游民
精华: 0
发帖: 81
灵魂: 0 颗
水晶: 0 颗
贡献石: 0 颗
警告石: 0 颗
好评石: 0 颗
信誉石: 0 颗
技术分: 2 分
活跃分: 0 分
银行水晶总资产: 0 颗
在线时间: 28(小时)
注册时间: 2016-11-01
最后登录: 2017-01-17
2楼  发表于: 2017-01-15 19:32

摇钱树新版本推出,更加强大、完善的功能,首个具有完美支持win7系统的32、64位的网吧管理软件,在XP逐渐放弃的几天,我们将是最好的选择,期待您的支持
来自:   顶端