FastJSON的parseObject使用模板方法该怎么进行强制转换?
T retObj = JSON.parseObject(response.body().string(), new TypeReference<T>(){});就会在此处跳出ClassCastException报错,JSONObject无法转换为AccessResult。而如果我写成:
T retObj = (T) JSON.parseObject(response.body().string(), new TypeReference<AccessResult>(){});则不会报错,但生成的retObj为AccessResult类型,而实际上我需要它是AccessResult的子类UserAccessResult,向下强制转换的话同样会报错AccessResult无法转换为UserAccessResult。请问我该怎么做?
以下是代码:
1. 这是父类和子类,原本我想直接把AccessResult写成泛型的,因为AccessResult其实是网络请求返回结果的载体,responseBody实际上是根据需要返回不同的Bean对象。
public class AccessResult {
private Boolean result;
private String status;
protected Object responseBody;
public void setResult(Boolean result){
this.result = result;
}
public Boolean getResult(){
return this.result;
}
public void setStatus(String status) {
this.status = status;
}
public String getStatus() {
return this.status;
}
protected void setResponseBody(Object responseBody) {
this.responseBody = responseBody;
}
protected Object getResponseBody() {
return this.responseBody;
}
}
public class UserAccessResult extends AccessResult {
private User user = (User) responseBody;
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return this.user;
}
}
2. 这是具体实现代码
public static <T extends AccessResult> T post(Object params, String url){
……
// 初始化返回对象
T retObj = null;
try {
//创建调用对象,重写回调函数
Response response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()){
// success
retObj = JSON.parseObject(response.body().string(), new TypeReference<T>(){});
response.body().close();
}
else {
response.body().close();
throw new IOException("Unexpected code " + response);
}
} catch (NullPointerException | IOException e){
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
} finally {
return retObj;
}
}
UserAccessResult result = NetCommunication.post(u, getString(R.string.server_host_url) + "/login");
if (result != null && result.getResult()) {
app.setCurrentUser(result.getUser());
return true;
} else return false;
相关推荐
JSON.parseObject和JSON.toJSONString实例详解
当我们使用`JSON.parseObject(jsonString, Staff.class)`时,Fastjson尝试将JSON字符串映射到`Staff`类的对象。
Fastjson JSON.parseObject非法字符报错原因与排查方法
JSON解析是Java后端日常开发中高频使用的技术操作,而fastjson的JSON.parseObject方法在解析字符串时会对每一个字符进行严格校验,一旦遇到非法字符便会抛出异常,导致接口调用、配置文件读取等场景直接失败。这类问题常源于字符串拼接时未转义的双引号、隐藏的BOM头、不可见控制字符或编码不一致产生的乱码。理解JSON规范中结构字符与转义规则是排查的基础,掌握从报错信息定位、二分法压缩范围、到十六进制查看原始数据等工程化手段,能快速锁定问题根源。通过统一编码规范、禁止手工拼接JSON、增加数据
FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换操作
JSON格式字符串到JSON对象的转换: 使用`JSON.parseObject()`方法可以将JSON格式的字符串转换为JSONObject对象。
基于FastJson实现JSON与Java对象转换
本文档介绍了如何利用阿里巴巴的FastJson库进行JSON与Java对象之间的转换,这对于在Java开发中处理前后端数据交互非常实用。FastJson是一个高效的Java对象与JSON之间的转换工具
fastjson使用
- **缓存**:对于频繁使用的序列化/反序列化对象,可以考虑使用 Fastjson 提供的缓存机制提高性能。- **注意性能**:尽量减少不必要的 JSON 转换,尤其是在循环或高并发场景下。


