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