三十四、JSON转换小细节
2014-02-26 18:13
162 查看
今天遇到一个非典型性的需求,要写一个新的方法,其方法实现与已经实现了的一个老方法是一模一样的,但两个方法的入参和返回值都是相同的只是名称不同而已。要求必须写成两个方法,并携带各自的入参和返回值。那要怎么做呢?有几种方法?最简单的是,首先将新方法的入参和返回值转成和老方法一样的再在新方法中调用老方法。
老方法如下:
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了。
老方法如下:
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了。
相关文章推荐
- FastJson、Jackson、Gson进行Java对象转换Json的细节处理
- FastJson、Jackson、Gson进行Java对象转换Json的细节处理
- FastJson、Jackson、Gson进行Java对象转换Json的细节处理
- FastJson、Jackson、Gson进行Java对象转换Json的细节处理
- JAVA List对象与json串互相转换
- JSON对象和字符串之间的相互转换
- json和java的对象转换方法20121023(www.jb51.net)
- jQuery.parseJSON(json)方法将字符串转换成js对象
- 如何用Google APIs和Google的应用系统进行集成(8)----如何把Google Blogger(博客)的JSON Schema转换成XML的Schema(XSD)?
- c# string类型和json之间的相互转换
- Spring Boot 日期数据格式转换@JsonFormat实例
- 用工具进行Json的转换
- jackson 进行json与java对象转换 之三
- 如何把表单转换为Json:
- JSON字符串转换
- json数据根式的转换
- js对象, 数组 , json 互相转换
- js中将字符串转换成json的三种方式
- android中普通的java对象转换成 json格式的字符串