JSON转化为JavaBean

背景叙述
一个本地客户端(就是exe安装包)的开发,因此会复用一些web端系统的接口,在复用时肯定就是拿到返回结果后的处理了,因为web端系统的返回结果原本是给前端用的,一般都是JSON(JSONObject)对象,因此在客户端拿到返回结果后需要对数据进行处理,下面就针对某个示例进行记录;

示例:
传入一个value值,去web端系统中查询这个value值在字典中的中文名称是什么;

业务逻辑代码

public String getNameByValue(String value) {
     
    User currentUser = UserUtil.getCurrentUser();
    if (StringUtils.isNotBlank(currentUser.getUser_id())) {
     
    	// 开始拼装请求
        String url = SYS_BASE_URL + "/dict/dictionary?code=blockType";
        restTemplate.getInterceptors().add(interceptor);
        String result = restTemplate.getForObject(url, String.class);
        // 设置接收参数的数据模型
        ResponseData<List<BlockTypeInfo>> resourceData = FastJsonUtil.toBean(result, ResponseData.class);
        if (resourceData.getHttpCode() == 200) {
     
        	// 首先转化成List的数据结构 - 但是里面的对象数据仍然是JSONObject类型的,不可被正常操作
            List<BlockTypeInfo> blockTypeInfoList = FastJsonUtil.toBean(JSON.toJSONString(resourceData.getData()), List.class);
            // 循环List列表中的元素,将JSONObject类型BlockTypeInfo数据进一步转化为真正的BlockTypeInfo对象
            for (int i = 0; i < blockTypeInfoList.size(); i++){
     
                BlockTypeInfo blockTypeInfo = FastJsonUtil.toBean(JSON.toJSONString(blockTypeInfoList.get(i)), BlockTypeInfo.class);
                // 匹对每个字典数据的value值是否和用户输入的一致
                if (value.equalsIgnoreCase(blockTypeInfo.getDictKey())){
     
                    return blockTypeInfo.getDictValue();
                }
            }
        }
    }
    return null;
}

上面说的value仅仅是用于拿到结果后进行比对的,在调用web端系统接口时并未用到value;


Json转化工具类

package org.macrocloud.btclient.common.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.JSONLibDataFormatSerializer;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.util.List;
import java.util.Map;

public class FastJsonUtil {
     
    private static final SerializeConfig CONFIG;

    static {
     
        CONFIG = new SerializeConfig();
        CONFIG.put(java.util.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
        CONFIG.put(java.sql.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
    }

    private static final SerializerFeature[] FEATURES = {
     SerializerFeature.WriteMapNullValue, // 输出空置字段
            SerializerFeature.WriteNullListAsEmpty, // list字段如果为null,输出为[],而不是null
            SerializerFeature.WriteNullNumberAsZero, // 数值字段如果为null,输出为0,而不是null
            SerializerFeature.WriteNullBooleanAsFalse, // Boolean字段如果为null,输出为false,而不是null
            SerializerFeature.WriteNullStringAsEmpty // 字符类型字段如果为null,输出为"",而不是null
    };


    public static String toJSONString(Object object) {
     
        return JSON.toJSONString(object, CONFIG, FEATURES);
    }

    public static String toJSONNoFeatures(Object object) {
     
        return JSON.toJSONString(object, CONFIG);
    }


    public static Object toBean(String text) {
     
        return JSON.parse(text);
    }

    public static <T> T toBean(String text, Class<T> clazz) {
     
        return JSON.parseObject(text, clazz);
    }

    /**
     * 转换为数组
     */
    public static <T> Object[] toArray(String text) {
     
        return toArray(text, null);
    }

    /**
     * 转换为数组
     */
    public static <T> Object[] toArray(String text, Class<T> clazz) {
     
        return JSON.parseArray(text, clazz).toArray();
    }

    /**
     * 转换为List
     */
    public static <T> List<T> toList(String text, Class<T> clazz) {
     
        return JSON.parseArray(text, clazz);
    }

    /**
     * 将string转化为序列化的json字符串
     */
    public static Object textToJson(String text) {
     
        return JSON.parse(text);
    }

    /**
     * json字符串转化为map
     */
    public static Map stringToCollect(String s) {
     
        return JSONObject.parseObject(s);
    }

    /**
     * 将map转化为string
     */
    public static String collectToString(Map m) {
     
        return JSONObject.toJSONString(m);
    }
}


BlockTypeInfo 实体对象

package org.macrocloud.btclient.model.bean;

import lombok.Data;


/**
 * @Author:qtl
 * @Discription:
 * @Date:18:41 2021/4/29
 */
@Data
public class BlockTypeInfo {
     
    /**
     * 区块头
     */
    private String id;
    /**
     * 区块body
     */
    private String parentId;
    /**
     * 该区块的hash
     */
    private String code;

    private String dictKey;

    private String dictValue;

    private String sort;

    private String remark;

    private String isSealed;

    private String isDeleted;

    @Override
    public String toString() {
     
        return "BlockTypeInfo{" +
                "id=" + id +
                ", parentId=" + parentId +
                ", code='" + code + '\'' +
                ", dictKey='" + dictKey + '\'' +
                ", dictValue='" + dictValue + '\'' +
                ", sort='" + sort + '\'' +
                ", remark='" + remark + '\'' +
                ", isSealed='" + isSealed + '\'' +
                ", isDeleted='" + isDeleted + '\'' +
                '}';
    }
}


下图即是拼装的请求所查询到的数据:
JSON转化为JavaBean_第1张图片
放行到return后看到如下图所示的数据被筛选出来:
JSON转化为JavaBean_第2张图片

《END》

你可能感兴趣的:(Java开发点滴,随记,JSON转JavaBean)