Json与JavaBean之间的转换

2023-11-11

说到json与javaBean之间的转换,这两者更加频繁,json本身就是作为数据交换格式而存在的。在项目中用到的地方很多。这里我只说最常见的一处位置:那就是将数据转换成json再存储到redis中。

redis作为缓存数据库,在电商项目中是标配。项目中一些变化次数不大或者固定数据,为了提高用户访问速度,往往会转换成json字符串存入到redis中。当用户访问时,会从redis中获取,再转换成原数据传人到前端页面展示。例如用户登录信息,如图:

 /**
     * 用户登录
     *
     * @param userLoginVo
     * @return
     */
    @Override
    public String login(UserLoginVo userLoginVo, String redirectUrl, RedirectAttributes redirectAttributes,
                        HttpServletResponse response) {
        //远程调用获取登录信息。
        MemberLoginVo memberLoginVo = new MemberLoginVo();
        BeanUtils.copyProperties(userLoginVo, memberLoginVo);
        R r = this.userFeignService.memberLogin(memberLoginVo);
        Map<String, String> errors;
        if ("5".equalsIgnoreCase(r.get("code").toString())) {
            errors = new HashMap<>();
            errors.put("loginAcct", r.get("msg").toString());
            redirectAttributes.addFlashAttribute("errors", errors);
            return "redirect:" + WebConst.LOGIN_URL + "?redirectUrl=" + redirectUrl;
        }
        if ("6".equalsIgnoreCase(r.get("code").toString())) {
            errors = new HashMap<>();
            errors.put("passWord", r.get("msg").toString());
            redirectAttributes.addFlashAttribute("errors", errors);
            return "redirect:" + WebConst.LOGIN_URL + "?redirectUrl=" + redirectUrl;
        }
        if (r.getCode() != 0) {
            return "redirect:" + WebConst.LOGIN_URL + "?redirectUrl=" + redirectUrl;
        }
        MemberEntity memberEntity = r.typeConversion("member", MemberEntity.class);
        MemberLoginRespVo respVo = new MemberLoginRespVo();
        respVo.setGender(String.valueOf(memberEntity.getGender()));
        respVo.setMemberId(String.valueOf(memberEntity.getId()));
        respVo.setMemberName(memberEntity.getUsername());
        respVo.setNickName(memberEntity.getNickname());
        respVo.setGrowth(memberEntity.getGrowth());
        respVo.setIntegration(memberEntity.getIntegration());
        String code = UUID.randomUUID().toString().replace("-", "");
        Cookie cookie = new Cookie("loginToken", code);
        cookie.setDomain("lihuking.com");
        cookie.setMaxAge(WebConst.COOKIE_MAXAGE);
        response.addCookie(cookie);
        redisUtils.setDataToRedis(code,respVo );
        if (redirectUrl.indexOf("?") != -1) {
            return "redirect:" + redirectUrl + "&code=" + code;
        }
        return "redirect:" + redirectUrl + "?code=" + code;
    }



 /**
     * 保存数据到redis中。
     * @param key
     * @param value
     */
    public void setDataToRedis(String key, Object value) {
        StringRedisTemplate template = new StringRedisTemplate(factory);
        String jsonStr = JSON.toJSONString(value);
        template.opsForValue().set(key, jsonStr,30, TimeUnit.MINUTES);
    }

    用户登录后会将用户信息转换成json缓存到redis中。

在这次项目中我使用的是阿里的fastJson,除此还有一个是谷歌的Gosn,这两个相对来说比较简单,

上手快,另外,我还自己封装了一个工具类,也一起发表出来。

    implementation group: 'com.google.code.gson', name: 'gson', version: '2.10.1'
    implementation group: 'com.alibaba', name: 'fastjson', version: '2.0.26'
import com.alibaba.fastjson2.JSON;
import com.google.gson.Gson;

import java.io.*;
import java.nio.charset.StandardCharsets;

public class JSONUtil {

    /**
     * 将javaBean转换成json字符串
     * @param obj 需要转换的java对象
     * @return  json格式的字符串 json
     * @param <T>  泛型参数,这里指javaBean的类型
     */
    public static <T> String javaBeanToJsonStr(T obj){
        Gson gson=new Gson();
        String json = gson.toJson(obj);
        return json;
    }
    /**
     * 将json字符串转换成javaBean对象
     * @param jsonStr json格式的字符串
     * @param type 需要获得的javaBean的类型
     * @return 返回一个javaBean对象
     * @param <T> 泛型参数,这里指javaBean的类型
     */
    public static <T> T jsonToJavaBean(String jsonStr,Class<T> type){
        Gson gson=new Gson();
        T t = gson.fromJson(jsonStr, type);
        return t;
    }

    /**
     * 将java对象转换为json对象
     * @param obj 需要转换的java对象
     * @return   json对象
     * @param <T> 泛型参数,这里指javaBean的类型
     */
    public static <T> Object javaBeanToFastJson(T obj){
        Object o = JSON.toJSON(obj);
        return o;
    }

    /**
     *  json对象转换成java对象。
     * @param type 需要获得的javaBean的类型
     * @param obj  json对象:
     * @return     javaBean
     * @param <T>  泛型参数,这里指javaBean的类型
     */
    public static  <T> T fastJsonToJavaBean(Class<T> type,Object obj){
        T t = JSON.to(type, obj);
        return t;
    }

    /**
     * 将指定文件中的json对象或者字符串转换成javaBean
     * @param fileName 指定文件的文件名
     * @param type 需要转换的javaBean的类型
     * @return  返回转换的javaBean对象
     * @param <T>  泛型参数,这里指javaBean的类型
     * @throws IOException  io异常
     */
    public static <T> T  jsonToJavaBeanByFileName(String fileName,Class<T> type)throws IOException{
        //读取Resource目录下的json文件
        InputStream in = JSONUtil.class.getResourceAsStream("/" + fileName);
        //利用输入流获取json文件内容
        BufferedReader br = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
        StringBuilder buffer = new StringBuilder();
        String line = "";
        while ((line = br.readLine()) != null) {
            buffer.append(line);
        }
        br.close();
        T t = JSON.parseObject(buffer.toString(),type);
        return t;
    }

    /**
     * 将json对象序列化到resource目录下的文件中
     * @param json 需要序列化的json字符串
     * @param fileName 需要创建的文件名称
     * @throws IOException  io异常
     */
    public static void writeJsonToText(String json,String fileName) throws IOException {
        String filePath="src\\main\\resources\\"+fileName;
        File file=new File(filePath);
        if (!file.exists()){
            file.createNewFile();
        }
        OutputStream out=new FileOutputStream(file);
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(out,StandardCharsets.UTF_8));
        bw.write(json);
       bw.close();
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Json与JavaBean之间的转换 的相关文章

随机推荐

  • 端口转发工具 rinetd 的使用

    rinetd 可以将服务器的端口转发到另一个端口 1 安装rinetd 服务 vi etc yum repos d nux misc repo 输入以下内容报存 nux misc name Nux Misc baseurl http li
  • c++与c#的区别

    1 继承 C 支持多继承 C 类只能继承一个基类中的实现但可以实现多个接口 2 数组 声明 C 数组和声明 C 数组的语法不同 在 C 中 标记出现在数组类型的后面 3 数据类型 在C 中bool类可以与整型转换 但C 中bool 类型和其
  • 脚本ssh进入其他主机报错--bash: jps: command not found和Error: JAVA_HOME is not set and java could not be found

    文章目录 一 报错图例 二 报错原因 三 解决方案 三种 一 报错图例 二 报错原因 原因 在shell脚本写的ssh到其他节点的时候默认是不加载配置文件的 linux并不能去找到java中jps的命令和java的path路径等 三 解决方
  • 【java面试题】lock和synchronized有什么区别?

    学习目标 掌握 lock 与 synchronized 的区别 理解 ReentrantLock 的公平 非公平锁 理解 ReentrantLock 中的条件变量 lock 与 synchronized 的区别有三个层面 学习内容 1 不同
  • QT运行不出界面

    如果只出现如下一个黑色运行窗口 说明你环境配置的基本没啥问题 可以试试 项目 gt 构建设置中 gt General gt Shadow build 取消勾选 如下 如果第一种没有解决 看下构建出的release目录或者debug目录中 是
  • 自己实现图形验证码

    如果不想重复造轮子 参考上一篇文章 SpringBoot生成图形验证码 Muscleheng的博客 CSDN博客 这里不需要依赖开源组件包 完全自己实现图形验证码功能 两步完成 第一步 编写图形验证码工具 package com zhh d
  • 微信小程序 webiew缓存问题

    在微信小程序webview中嵌套H5页面 我们原本使用了localStorage用来标识用户信息的 但是后来发现在android手机上每一次杀掉小程序进程之后 localStorage的数据也会被清除 这样的话就和我们原本的意愿是相违背的
  • web 服务器安全维护,Web服务器安全攻击及防护机制详解

    Web安全分为两大类 Web服务器的安全性 Web服务器本身安全和软件配置 Web应用程序的安全性 在Web服务器上运行的Java ActiveX PHP ASP代码的安全 Web服务器面临的攻击 Web服务器攻击利用Web服务器软件和配置
  • 标定CCP协议在S32K144上的移植实战

    文章目录 目录 文章目录 前言 一 CCP是什么 二 移植步骤 1 准备工作 2 移植 3 测试验证 总结 前言 CCP协议在新能源汽车电子领域发挥着重要作用 CCP观测和标定作用对开发工程师起着重要作用 疫情宅在家无聊 把这块的知识重新梳
  • 4.3 配置Mysql与注册登录模块(下)

    目录 学习目标 学习内容 登录状态持久化 学习目标 前端页面授权 注册页面 登录状态的持久化 学习内容 实现前端页面的授权 import createRouter createWebHistory from vue router impor
  • LATEX以及宏包的下载和安装(附下载链接)

    LATEX以及宏包的下载和安装 附下载链接 TexStudio以及宏包下载和安装 LATEX以及宏包的下载和安装 附下载链接 1 环境下载 2 环境安装 2 1 MiKTeX安装 2 2 TexStudio的安装 3 配置 写作 1 环境下
  • 50个常见的 Java 错误及避免方法(第二部分)

    接上文50个常见的 Java 错误及避免方法 第一部分 17 Cannot Return a Value From Method Whose Result Type Is Void 当一个void方法尝试返回值时 就会发生此Java错误 例
  • Spring实现博客系统

    在上次用Servlet实现了博客系统之后 一直觉得代码写起来比较繁琐 而且耦合度很高 直到学习了Spring 我又看到了一线生机 运用SpringBoot重新改造了我的博客系统 接下来讲讲Spring是个什么东西 并把我的改造思路给大家分享
  • java 单列集合List 万字详解(通俗易懂)

    目录 前言 一 概述 二 特点 三 使用集合的经典四部曲 四 List接口的常用成员方法 前言 直接看汇总也可以 含讲解 1 常用十个成员方法及代码演示 准备工作1 准备工作2 public boolean add E e 代码演示 pub
  • cookies,sessionStorage 和 localStorage

    面试问题 如何实现浏览器内多个标签页之间的通信 既请描述一下 cookies sessionStorage 和 localStorage 的区别 cookie在浏览器和服务器间来回传递 sessionStorage和localStorage
  • linux创建线程失败errno=11

    问 题 为什么一个进程调用pthread create来创建线程 当251次就失败了 失败errno11 Resource temporarily unavailable 原 因 一个进程最多拥有250个线程资源 由于pthread cre
  • linux 命令 显示 但是不执行

    用 p命令答应以前的某条命令但是不执行 123 p
  • 026:vue中el-progress逆向倒计时方式显示

    第026个 查看专栏目录 VUE element UI 专栏目标 在vue和element UI联合技术栈的操控下 本专栏提供行之有效的源代码示例和信息点介绍 做到灵活运用 1 提供vue2的一些基本操作 安装 引用 模板使用 comput
  • Excel百万级数据导入导出,EasyExcel 才是真香

    在项目开发中往往需要使用到数据的导入和导出 导入就是从Excel中导入到DB中 而导出就是从DB中查询数据然后使用POI写到Excel上 大数据的导入和导出 相信大家在日常的开发 面试中都会遇到 很多问题只要这一次解决了 总给复盘记录 后期
  • Json与JavaBean之间的转换

    说到json与javaBean之间的转换 这两者更加频繁 json本身就是作为数据交换格式而存在的 在项目中用到的地方很多 这里我只说最常见的一处位置 那就是将数据转换成json再存储到redis中 redis作为缓存数据库 在电商项目中是