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
    评论
要让 Java 接口返回 JSON 数据格式,你可以使用任何一个 JSON 库,比如 Jackson、Gson 或者 Fastjson。以下是使用 Jackson 库的示例代码: 首先,确保你的项目中已经引入了 Jackson 库的依赖。如果使用 Maven 管理项目依赖,可以在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.3</version> </dependency> ``` 然后,在你的 Controller 中,可以按照如下方式编写代码: ```java import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @Autowired private ObjectMapper objectMapper; @GetMapping("/my-api") public MyResponse myApi() { MyResponse response = new MyResponse(); response.setCode(200); response.setMessage("Success"); // 设置其它字段... return response; } public static class MyResponse { private int code; private String message; // 其它字段... // 省略 getter 和 setter 方法... public String toJson() { try { return objectMapper.writeValueAsString(this); } catch (Exception e) { throw new RuntimeException(e); } } } } ``` 以上代码中,我们使用 Jackson 库的 ObjectMapper 对象将 Java 对象转换为 JSON 字符串。在 MyResponse 类中,我们添加了 toJson() 方法,该方法将 MyResponse 对象转换为 JSON 字符串。 当客户端请求 /my-api 接口时,MyController 的 myApi() 方法返回 MyResponse 对象,并且 MyResponse 对象会被自动转换为 JSON 格式的数据返回给客户端。如果你想手动序列化对象为 JSON 字符串,可以调用 MyResponse.toJson() 方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值