首先我的项目是一个为移动端提供的json数据的,当后台报错时如果为移动端返回一个错误页面显得非常不友好,于是通过ControllerAdvice注解返回json数据。
首先创建一个异常处理类:
package com.gefufeng.controller; import com.gefufeng.common.exception.KnownBizException; import org.apache.commons.lang.StringUtils; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.springframework.http.HttpStatus; import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map;
加上ControllerAdvice注解,注意这个类是在controller包下面,因为spring需要扫描到,
代码中的:
@ExceptionHandler(value = Exception.class)
表示捕捉到所有的异常,你也可以捕捉一个你自定义的异常,比如:
@ExceptionHandler(BusinessException.class) @ResponseBody
然后我在一个接口中故意抛出一个异常:
@RestController @RequestMapping(value = "/customer",produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public class CustomerController extends BaseController{ @Autowired CustomerService customerService; @RequestMapping(value = "/getcustomer",method = RequestMethod.GET) public String getCustomer(){ logger.info(EnvironmentUtils.isTest()); List<Customer> customers = customerService.getCustomerList(); throw new KnownBizException("已知的异常"); } }
最后后台返回的数据是:
{
"msg": "已知的异常", "path": "/myschool/customer/getcustomer", "tip": "此错误说明调用接口失败,失败原因见msg,如果msg为空,联系后台", "params": {}, "status": "0" }