spring 拦截器 返回数据_interceptor拦截器返回json数据

本文介绍了如何在Spring拦截器中利用Jackson库返回JSON数据。解释了拦截器返回原理是直接通过response,并讨论了选择Jackson的原因,包括ResponseBody的限制。
摘要由CSDN通过智能技术生成

使用Jackson进行返回

public class JWTInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        try {
            String token =  request.getHeader("token");//注意:token要放在请求头中
            JWTUtils jwtUtils = new JWTUtils();
            jwtUtils.verifyToken(token);
            return true;
        }catch (SignatureVerificationException e){
            e.printStackTrace();
        }catch (TokenExpiredException e){
            e.printStackTrace();
        }catch (AlgorithmMismatchException e){
            e.printStackTrace();
        }catch (InvalidClaimException e){
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }

        falseResult(response);
        return false;
    }

    public void falseResult(HttpServletResponse response) throws IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json; charset=utf-8");
        ResultBody resultBody = new ResultBody(false,null,"没有token");
        ObjectMapper objectMapper = new ObjectMapper();
        response.getWriter().println(objectMapper.writeValueAsString(resultBody));
        return;
    }
}

f9ce8d36ea5a1e6d67243b4ecf94d9fa.png
重点的地方

拦截器返回的原理其实是“response直接返回”,如下

public class JWTInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        try {
            String token =  request.getHeader("token");//注意:token要放在请求头中
            JWTUtils jwtUtils = new JWTUtils();
            jwtUtils.verifyToken(token);
            return true;
        }catch (SignatureVerificationException e){
            e.printStackTrace();
        }catch (TokenExpiredException e){
            e.printStackTrace();
        }catch (AlgorithmMismatchException e){
            e.printStackTrace();
        }catch (InvalidClaimException e){
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }

        response.getWriter().println("interceptor ont allow access!");
        return false;
    }

被拦截后,响应体显示信息为:

8023cc3a6bc3795307e22467ef8baf6c.png

借用Jackson的原因

1:尝试了使用@ResponseBody,发现其只能在@Controller下使用

2:Jackson方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值