controller中统一异常处理之@ControllerAdvice && @ExceptionHandler

controller返回值统一处理:https://blog.csdn.net/fz13768884254/article/details/81868835

 

@ControllerAdvice:官方api

@ControllerAdvice:官方api

 

具体实现细节,见代码:

package com.demo.controller;

import com.demo.exception.BadRequestException;
import com.demo.exception.NotReadyForSaleException;
import com.demon.exception.UserIllegalException;
import com.demo.common.result.base.Result;
import com.demo.result.base.ResultHelper;
import com.demo.result.enums.ResultCodeEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
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;

/**
 * @author: fz
 * @date: 2018
 * @description:
 */
@ControllerAdvice(basePackages = "com.demo.controller")
public class DemoControllerAdvice {

    private Logger logger = LoggerFactory.getLogger(DemoControllerAdvice.class);

    @ExceptionHandler(value = UserIllegalException.class)  //处理的异常类型
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    @ResponseBody
    public Result handleUserIllegalException(HttpServletRequest request, UserIllegalException e){
        logger.error("非法请求,{}",e.getMessage());
        return ResultHelper.setResultData(ResultCodeEnum.BAD_REQUEST_AUTH, e.getMessage()); //返回参数封装
    }

    @ExceptionHandler(value = {BadRequestException.class, NotReadyForSaleException.class}) //处理的异常类型
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public Result handleBadRequestException(HttpServletRequest request, Exception e){
        logger.error("错误请求,{}",e.getMessage());
        return ResultHelper.setResultData(ResultCodeEnum.BAD_REQUEST, e.getMessage());
    }

    @ExceptionHandler(value = Exception.class) //处理的异常类型
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public Result handleException(HttpServletRequest request, Exception e){
        logger.error("内部错误,{}",e);
        return ResultHelper.setResultData(ResultCodeEnum.INTERNAL_SERVER_ERROR, e.getMessage());
    }
}

controller中代码:根据参数和获取数据,直接new一个异常(自定义或运行异常)

   @Autowired
    private DemoService demoService;

@RequestMapping(value = "/getAccountInfo", method = { RequestMethod.GET})
    @ResponseBody
    public Result getRatePlanInfo(@RequestParam("id") Long id){
        if(id==null){
            throw new BadRequestException("获取account信息请求必传参数id为空");
        }
        Account account = demoService.getAccountbyId(id);
        if(account ==null){
            throw new UserIllegalException("入参有误或帐号不存在");
        }
        logger.info(JSON.toJSONString(account));
        return ResultHelper.setResultData(account);
    }

 记得在spring-web.xml中开启注解扫描:

<context:component-scan base-package="com.demo" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    <context:include-filter type="annotation"
                            expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值