Java的response返回Json格式

问题

今天开发过程中,写了个拦截器,对于所以请求进行一个token的工作,对于不合标准的token返回错误,在网上找了个拦截器进行二次开发。

package com.maizhiyu.yzt.handle;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;

@Component
public class TokenInterceptor implements HandlerInterceptor {

    @Autowired
    private RedisTemplate redisTemplate;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception{
        //Axios 发起跨域请求前,浏览器也会首先发起 OPTIONS 预检请求。检查服务器是否允许跨域访问。
        System.out.println("拦截的请求路径:" + request.getRequestURI());
        System.out.println("拦截的请求方法:" + request.getMethod());
        if(request.getMethod().equals("OPTIONS")){
            response.setStatus(HttpServletResponse.SC_OK);
            System.out.println("允许跨域访问");
            return true;
        }

        response.setCharacterEncoding("utf-8");
        int  index = request.getHeader("cookie").indexOf("token:");
        String token = request.getHeader("cookie").substring(index);
        if(token != null){
            if(true){
                Object o = redisTemplate.opsForValue().get("yztMsCusToken:login:token:" + token);
                if(o==null){
                    System.out.println("token过期或者在用户退出的时候已删除,redis找不到");
                    return   false;
                }
                System.out.println("通过拦截器");
                return true;
            }
        }
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = null;
        response.getWriter().write("认证失败,错误码:50000");
        return false;
    }
}

但是发现这里返回的值是一个String。

但公司的要求是按照固定的Result的格式进行返回的,这就需要转一下了。一开的想法是把里面的直接String转变为Result.toString。

response.getWriter().write(Result.failure(401,"token非法").toString());

结果也是不合标准的。

解决方案

使用JSONObject

JSONObject jsonObject =new JSONObject();
jsonObject.put("code",401);
jsonObject.put("msg","失败");

response.getWriter().write(jsonObject.toString());
response.setContentType("application/json; charset=utf-8");

输出结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值