三十四、JSON转换小细节

今天遇到一个非典型性的需求,要写一个新的方法,其方法实现与已经实现了的一个老方法是一模一样的,但两个方法的入参和返回值都是相同的只是名称不同而已。要求必须写成两个方法,并携带各自的入参和返回值。那要怎么做呢?有几种方法?最简单的是,首先将新方法的入参和返回值转成和老方法一样的再在新方法中调用老方法。

老方法如下:

public QueryFeedCommentsResponse queryFeedComments(QueryFeedCommentsRequest queryFeedCommentsRequest)  {
......
}

新方法如下:

public QueryFeedDetailResponse queryFeedDetail(QueryFeedDetailRequest queryFeedDetailRequest) {
//1.将入参queryFeedDetailRequest转换成queryFeedCommentsRequest

JSONObject jsonObject = JSONObject.fromObject(queryFeedDetailRequest);
QueryFeedCommentsRequest queryFeedCommentsRequest =(QueryFeedCommentsRequest)JSONObject.toBean(jsonObject, QueryFeedCommentsRequest.class);

//2.调用老方法

QueryFeedCommentsResponse queryFeedCommentsResponse =  queryFeedComments(queryFeedCommentsRequest);

//3.将返回值 queryFeedCommentsResponse 转换成QueryFeedDetailResponse

JSONObject jsonObject2 = JSONObject.fromObject(queryFeedCommentsResponse);
QueryFeedDetailResponse queryFeedDetailResponse =(QueryFeedDetailResponse)JSONObject.toBean(jsonObject2, QueryFeedDetailResponse.class);

}

原则上说这样是可以的,但是在从老方法的返回值转成新方法的返回值时遇到了json转换方面的报错:

java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.nvshen.api.domain.feed.FeedCommentComponent
为什么呢?如果返回值QueryFeedDetailResponse包含的都是普通类型的,那这样转换就没有任何问题,但QueryFeedDetailResponse却是这样的:

public class QueryFeedDetailResponse{


public List<FeedCommentComponent> commentList;
public String pageNo;
public String totalPage;

public List<FeedCommentComponent> getCommentList() {
return commentList;
}
public void setCommentList(List<FeedCommentComponent> commentList) {
this.commentList = commentList;
}
public String getPageNo() {
return pageNo;
}
public void setPageNo(String pageNo) {
this.pageNo = pageNo;
}
public String getTotalPage() {
return totalPage;
}
public void setTotalPage(String totalPage) {
this.totalPage = totalPage;
}
}

正是因为QueryFeedDetailResponse中含有List型的元素,那要如何解决呢?

public QueryFeedDetailResponse queryFeedDetail(QueryFeedDetailRequest queryFeedDetailRequest) throws NvshenException {
JSONObject jsonObject = JSONObject.fromObject(queryFeedDetailRequest);
QueryFeedCommentsRequest queryFeedCommentsRequest =(QueryFeedCommentsRequest)JSONObject.toBean(jsonObject, QueryFeedCommentsRequest.class);
QueryFeedCommentsResponse queryFeedCommentsResponse =  queryFeedComments(queryFeedCommentsRequest);

//3.将返回值 queryFeedCommentsResponse 转换成QueryFeedDetailResponse
JSONObject jsonObject2 = JSONObject.fromObject(queryFeedCommentsResponse);
Map<String, Class> classMap = new HashMap<String, Class>();
classMap.put("commentList", FeedCommentComponent.class);
QueryFeedDetailResponse queryFeedDetailResponse=(QueryFeedDetailResponse) JSONObject.toBean(jsonObject2, QueryFeedDetailResponse.class, classMap);

return queryFeedDetailResponse;

}
这样就转化ok了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值