zoukankan      html  css  js  c++  java
  • Spring REST 异常处理

    在上一篇中写到了Spring MVC的异常处理,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注解的类中定义从而使异常处理对整个程序有效。

  • 相关阅读:
    第九章:Elasticsearch集群优化及相关节点配置说明
    Linux115条常用命令
    第一章:引擎介绍
    第七章:JAVA引用ESWCF及部分方法说明
    第八章:SCRT搭建ES搜索引擎步骤
    第三章:ES分词简单说明
    第二章:ES索引说明
    疑难杂症:Java中Scanner连续获取int和String型发生错误.
    java实现中缀表达式转后缀表达式
    编程题:输出字符集合的所有排列组合。
  • 原文地址:https://www.cnblogs.com/hupengcool/p/4587220.html
Copyright © 2011-2022 走看看