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

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

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

1、定义移动端的请求【User-Agent】数组,基本以下现在的移动端的都包含了
对于"Okhttp"的深入了解可以参照这位的简书:
Okhttp3基本使用

    /**
     * 手机端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());
    }

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

友情链接更多精彩内容