Json与JavaBean之间的转换

说到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();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
fastjson是一款高性能的Java JSON处理器,它提供了很多功能实现JSON字符串与Java对象的转换。复杂JSON格式字符串转换JavaBean对象时,需要按照以下的方法进行操作: 首先,我们需要创建一个JavaBean类,属性需要与对应的JSON格式相匹配,可以使用注解或者getter、setter方法来指定属性名。如下面的代码片段所示,我们创建了一个User类。 ```java public class User { private String name; private int age; private List<Address> addressList; // getter、setter、toString方法省略 } ``` 在User类中,我们定义了与JSON格式相对应的属性,其中addressList是一个List类型,它的元素是Address类型,如下所示: ```java public class Address { private String city; private String street; private String zipCode; // getter、setter、toString方法省略 } ``` 接着,我们可以使用fastjson提供的工具类JSON.parseObject()方法将JSON格式字符串转换JavaBean对象。如下所示: ```java String jsonStr = "{\"name\":\"Tom\",\"age\":18,\"addressList\":[{\"city\":\"beijing\",\"street\":\"chaoyang\",\"zipCode\":\"100000\"},{\"city\":\"shanghai\",\"street\":\"pudong\",\"zipCode\":\"200000\"}]}"; User user = JSON.parseObject(jsonStr, User.class); ``` 在上面的代码中,我们首先定义了一个JSON格式字符串,然后使用JSON.parseObject()方法将其转换为User对象。在这个方法的第一个参数中,我们需要传入JSON格式字符串,第二个参数是目标JavaBean的类型。fastjson会自动将JSON字符串中的属性值赋值给JavaBean对象中的对应属性。如果JSON格式字符串中的属性名称与JavaBean中的属性名称不匹配,我们需要在JavaBean中使用@JSONField注解或者getter、setter方法指定对应的属性名。 在将JavaBean对象转换JSON格式字符串时,我们可以使用fastjson提供的工具类JSON.toJSONString()方法。如下所示: ```java String jsonUser = JSON.toJSONString(user); ``` 在上面的代码中,我们将User对象转换JSON格式字符串。 总结来说,通过fastjson将复杂JSON格式字符串转换JavaBean对象需要创建对应的JavaBean类,然后使用JSON.parseObject()方法将JSON字符串转换JavaBean对象。如果需要将JavaBean对象转换JSON字符串,我们可以使用JSON.toJSONString()方法实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值