Guns开源框架对不同的设备请求产生异常时配置返回状态码

针对于现在各种移动设备和小程序,都可以调用接口来请求服务,一般在PC端调用接口产生异常,比如返回500的状态码,展示对应的错误信息,但是针对移动设备端的接口请求,当状态码为500的时候,就会判断成这个请求是错误的,无法拿到错误信息,针对此问题,在使用guns开源框架的时对其全局异常进行改造处理,一起来看一下吧!

解决问题的思路:获取请求头中的【User-Agent】来判断请求的设备类型,再针对设备类型进行返回状态码处理。

1、定义移动端的请求【User-Agent】数组,基本以下现在的移动端的都包含了
    对于"Okhttp"的深入了解可以参照这位的简书:
    [Okhttp3基本使用](https://www.jianshu.com/p/da4a806e599b)
    /**
     * 手机端User-Agent
     */
    public static final String[] agent = {"okhttp","Android", "iPhone", "iPod", "iPad", "Windows Phone", "MQQBrowser"};

2、定义方法,根据请求判断是否是移动设备,如果是移动设备则将返回码替换为200,如果是非移动端则使用原默认的状态码。
   /**
     * 设置返回的状态码  如果是小程序则全部设置为200
     * @param  request 请求
     * @param  response 响应
     * @param  statusCode 原需求配置的状态码
     */
    public void setStatus(HttpServletRequest request,HttpServletResponse response,Integer statusCode){
        //判断是否是小程序 如果是小程序则全作为200处理
        Integer defaultHttpStatus = statusCode;
        String userAgent = request.getHeader("User-Agent");
        for (String agent : Const.agent) {
            //判断是否是移动设备请求
            if (userAgent.contains(agent)) {
                defaultHttpStatus = HttpStatus.OK.value();
            }
        }
        response.setStatus(defaultHttpStatus);
    }
3、找到guns的全局异常配置类,修改内容。
全局异常配置类的位置:

image.png
对自己需要修改的异常进行代码修改。
比如这个认证异常:原框架代码

   /**
     * 认证异常--认证失败(账号密码错误,账号被冻结,token过期等)
     *
     * @author fengshuonan
     * @Date 2020/2/6 11:14 上午
     */
    @ExceptionHandler(AuthException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)//框架代码在这设置了返回码
    @ResponseBody
    public ErrorResponseData unAuth(AuthException e,HttpServletRequest request, HttpServletResponse response) {
       
        return new ErrorResponseData(e.getCode(), e.getMessage());
    }

更改代码为:

  /**
     * 认证异常--认证失败(账号密码错误,账号被冻结,token过期等)
     *
     * @author fengshuonan
     * @Date 2020/2/6 11:14 上午
     */
    @ExceptionHandler(AuthException.class)
    @ResponseBody
    public ErrorResponseData unAuth(AuthException e,HttpServletRequest request, HttpServletResponse response) {
        //设置状态码
        setStatus(request,response,HttpStatus.UNAUTHORIZED.value());
        return new ErrorResponseData(e.getCode(), e.getMessage());
    }

通过以上设置就可以针对不同的设备进行返回状态码的处理了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是福强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值