首页 新闻 赞助 找找看

关于JSON转换成对象 报错LinkedHashMap不能直接转成对象

0
悬赏园豆:100 [已关闭问题] 关闭于 2016-12-14 16:17

我有一个ResultMsg接受后台传过来的JSON

现在后台传过来的JSON是:

{"resultCode":1,"resultObject":{"userId":1,"petName":null,"userAge":null,"userSex":null,"userName":"admin","userPassword":"admin","hardIcon":null},"resultMsg":"登录成功"}
之后我利用JsonUtil工具类把 JSON数据转化成对象(其中resultObject是UserEntity类的类名):
 resultMsg = JsonUtil.toObject(result, ResultMsg.class);

ResultMsg类

1 public class ResultMsg {
2 
3     private int resultCode;
4     private Object resultObject;
5     private String resultMsg;
6 
7 
8     //get set……
9 }

转换成的对象是:

他的Object类 我是想直接转换成UserEntity,但是他这边是LinkedHashMap,之后我把Object变成UserEntity

1 public class ResultMsg {
2 
3     private int resultCode;
4     private UserEntity resultObject;
5     private String resultMsg;
6 
7 
8     //get set……
9 }

这样一来,在调用JsonUtil的toObject方法的时候,可以把resultObject部分转化成我想要的UserEntity了这样是可以的

但是我想我这个ResultMsg肯定要是通用的啊,我就想了把他改成

1 public class ResultMsg<E> {
2 
3     private int resultCode;
4     private E resultObject;
5     private String resultMsg;
6 
7 
8     //get set……
9 }

然后在new对象的时候

  ResultMsg<UserEntity> resultMsg = new ResultMsg<UserEntity>();

我原本以为他这边的<>里面是 UserEntity 那么对应的 ResultMsg类中的E也是UserEntity ,但是并不是 在转化的后 还是LinkedHashMap类型的

我现在就是想问下前辈们,如何写一个通用的ResultMsg类。。

大园子的主页 大园子 | 初学一级 | 园豆:37
提问于:2016-12-13 17:23
< >
分享
所有回答(4)
0

下一个jackson看里面怎么做的呗。

jasondyoung | 园豆:424 (菜鸟二级) | 2016-12-13 21:52
0

/**
* 用于ajax请求,返回非list的的包装类
* @author dev4
*
*/
public class ObjectResult<T> implements Serializable{

/**
*
*/
private static final long serialVersionUID = 4543583458127221425L;

private T data;

private String message;

private AjaxResponseStatus status;


public T getData() {
return data;
}

public void setData(T data) {
this.data = data;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public AjaxResponseStatus getStatus() {
return status;
}

public void setStatus(AjaxResponseStatus status) {
this.status = status;
}

public static <T>ObjectResult<T> success(String message, T data) {
ObjectResult<T> result = new ObjectResult<>();
result.setStatus(AjaxResponseStatus.SUCCESS);
result.setMessage(message);
result.setData(data);
return result;
}

public static <T>ObjectResult<T> success(String message) {
return success(message, null);
}

public static <T>ObjectResult<T> success() {
return success(null, null);
}

public static <T>ObjectResult<T> fail(String message) {
ObjectResult<T> result = new ObjectResult<>();
result.setStatus(AjaxResponseStatus.FAILED);
result.setMessage(message);
return result;
}
}

这是项目返回ajax请求的包装类,其中data类似你的resultObject,你可以看看找找感觉

让我发会呆 | 园豆:2929 (老鸟四级) | 2016-12-14 08:45
0

是不是要序列化跟反序列化。

青语 | 园豆:1000 (小虾三级) | 2016-12-14 09:44
0

一开始用的是jackson写的工具类 之后我自己网上又找了阿里巴巴的fastson

通用的ResultMsgDto为

public class ResultMsgDto<E> implements Serializable {

    private static final long serialVersionUID = 123L;

    private int resultCode;
    private E resultObject;
    private String resultMsg;
    
    // get set

}

使用方法是:

//UserDto这个是我要接收的 resultObject的 类型
ResultMsgDto<UserDto> resultMsgDto = new ResultMsgDto<UserDto>();

// 其中result是接收后台穿过来的json字符串 
 resultMsgDto = JSON.parseObject(result, new TypeReference<ResultMsgDto<UserDto>>() {
            });

乱码大家就无视、。。

 

 

大园子 | 园豆:37 (初学一级) | 2016-12-14 16:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册