SpringBoot的API经过拦截器后,拦截后返回JSON或其他Response的配置

2021-10-28 1603点热度 0人点赞 0条评论

SpringBoot的拦截器HandlerInterceptor下,我们在public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o)下进行了拦截,对不符合条件的请求,我们一般是返回一个非200的状态代码,例如:

@Component
public class PersonalInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) {
        // 如果不是映射到方法直接通过
        if (!(o instanceof HandlerMethod)) {
            return true;
        }
        String token = request.getHeader("token");
        if (StringUtils.isEmpty(token)) {
            token = request.getHeader("X-Token");
        }
        if (StringUtils.isEmpty(token)) {
            token = request.getParameter("token");
        }
        // 例如通过一定的方式检测token是否合法
        if (Utils.isValid(token)) {
            throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED, "Forbidden"); //返回401 UNAUTHORIZED 状态代码
        }

        return true;
    }
}

现在遇到另外一个需求,没有符合一定条件的请求,需要返回标准的JSON,或者其他返回数据,但是状态代码还是200

preHandle方法,有一个reponse参数,我们就可以在response下输出数据,然后return false(即处理完毕了)

@Component
public class PersonalInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) {
        // 如果不是映射到方法直接通过
        if (!(o instanceof HandlerMethod)) {
            return true;
        }
        String token = request.getHeader("token");
        if (StringUtils.isEmpty(token)) {
            token = request.getHeader("X-Token");
        }
        if (StringUtils.isEmpty(token)) {
            token = request.getParameter("token");
        }
        // 例如通过一定的方式检测token是否合法
        if (Utils.isValid(token)) {
            try {
                ObjectMapper mapper = new ObjectMapper();
                response.setContentType("application/json; charset=utf-8");
                // 这里是我封装的统一返回的Object,你也可以直接返回string,或者你的统一标准的Object
                response.getWriter().write(mapper.writeValueAsString(JsonResult.fail("请怎么样请怎么样")));
                return false;
            } catch (IOException ignored) {
            }
        }

        return true;
    }
}

 

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论