背景叙述
一个本地客户端(就是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 */@Datapublic 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 + '\'' + '}'; }}
下图即是拼装的请求所查询到的数据:
放行到return后看到如下图所示的数据被筛选出来: