求助!怎么在json数据中返回一个对象的List

小邓和周周jojo 2017-10-05 06:46:20
底层使用的是SSH集成的框架,最近在做一个APP的后台,我们安卓工程师说我给他返回的json数据格式不对,我现在写的模块的数据库表是有两个一个是广告类别Category,另外一个是广告Advertise

create table Category(
/* 广告类别编号,自动增长 */
cid int not null auto_increment,
/* 广告类别名称 */
ctype varchar(20),
/* 广告类别是否是热点类别,只有是热点类别才能显示在首页上 */
chot bool default false,
/* 广告分类封面图片 */
coverImage varchar(300),
/*广告分类下的广告*/
adId int,
/* 此广告类别由哪位管理员创建 */
aid int,
/* 设置类别编号为主键 */
primary key(cid)
);

/*------ 广告表结构 ------*/
create table Advertise(
/* 广告表编号,自动增长 √ */
adId int not null auto_increment,
/* 该广告的名称 √*/
adName varchar(100),
/* 广告的描述 √*/
description varchar(1000),
/*广告封面图片的存放路径*/
adCoverPath varchar(300),
/* 广告的存放路径 */
adPath varchar(300),
/* 广告的呈现方式
0-图片
1-视频
*/
adType varchar(2) default '0',
/* 当前广告下有多少个广告 */
adSum int(10),
/*该广告的总点击量*/
clickSum varchar(20) default '0',
/* 该广告属于哪个类别,分类类别 √ */
cid int,
/*该广告是属于哪个商家用户的?*/
id int,
/*该广告是由哪个管理员上传的*/
aid int,
/*对该广告进行最后一次修改的管理员*/
/*管理员上传广告的时间*/
/* 将广告表编号设置为主键 */
primary key(adId)
);

*******************model层是**********************************

public class Category implements java.io.Serializable {

// Fields

private Integer cid;
private String ctype;
private Boolean chot;
private String coverImage;
private Advertise advertise;
private Account account;
//getter/setter

**********************service层是******************************
public interface CategoryService extends BaseService<Category> {
// //这下面的方法可以抽象出一些公有的方法,因为几乎每一个模块都有
// public void save(Category category);//保存
//
// public void update(Category category);//更新
//
// public void delete(int id);//删除
//
// public Category query(int id);//查询单条数据
//
// public List<Category> queryAll();//查询所有数据

//查询类别信息,级联管理员,用类别的名称去查,加分页,page是要告诉我显示第几页,size是要告诉我每一页显示多少条数据
public List<Category> queryAllJoinAccount(String ctype,int page,int size);
//根据关键字查询总记录数
public long getCount(String ctype);

//根据ids删除多条记录
public void deleteByIds(String ids);

public long getCount();

//级联查询
public List<Category> queryJoin();
}


****************************serviceImpl****************************************
package com.server.advertise.service.impl;

import java.util.List;

import org.springframework.stereotype.Service;

import com.server.advertise.model.Category;
import com.server.advertise.service.CategoryService;
/**
*
* 里面放的是模块自身的业务逻辑
*
*/
@Service("categoryService")
public class CategoryServiceImpl extends BaseServiceImpl<Category> implements CategoryService {
//查询热点类别什么的
//如果类里面没有构造方法,在这里也会有缺省的构造方法
public CategoryServiceImpl(){
super();//调用该类的构造方法,会调用父类的构造方法
}

public static void main(String[] args) {
new CategoryServiceImpl();
}

@SuppressWarnings("unchecked")
@Override
public List<Category> queryAllJoinAccount(String ctype,int page,int size) {
String hql = "from Category c left join fetch c.account where c.ctype like :ctype";
return getSession().createQuery(hql).setString("ctype", "%" + ctype + "%")
.setFirstResult((page-1)*size)
.setMaxResults(size)
.list();
}

@Override
public long getCount(String ctype) {
String hql = "select count(c) from Category c where c.ctype like :ctype";
return (Long) getSession().createQuery(hql).setString("ctype", "%"+ ctype +"%").uniqueResult();
}

@Override
public void deleteByIds(String ids) {
String hql = "delete from Category where cid in (" + ids + ")";
getSession().createQuery(hql).executeUpdate();
}

@Override
public long getCount() {
// TODO Auto-generated method stub
return 0;
}

@SuppressWarnings("unchecked")
@Override
public List<Category> queryJoin() {
String hql = "select c.cid,ctype,chot,coverImage,adId,adName,description,adCoverPath,adPath,adType from category c,advertise a where c.cid = a.cid";
return getSession().createSQLQuery(hql).list();
}
}


**********************************action层*******************************************

//返回值返回的不是页面,而是json
public String queryAll(){
jsonMap = new HashMap<String, Object>();
List<Category> categoryList = categoryService.queryAll();
jsonMap.put("category", categoryList);
return "jsonDate";
}

**************************************struts.xml****************************************
<action name="category_*" class="categoryAction" method="{1}">

<!-- 必须先添加json的jar包,再继承json-default -->
<result name="jsonMap" type="json">
<!-- 要转换成json格式的数据 -->
<param name="root">pageMap</param>
<!-- 配置黑名单,过滤掉不需要的字段 ,使用正则表达式(做验证的语言),\d 一个数字,+ 一个或多个,? 0或者1,* 1或者多,[ABC] 自定义类型,必须是ABC中的一个,. 代表任意字符
-->
<param name="excludeProperties">
rows\[\d+\]\.account\.apass,
rows\[\d+\]\.account\.aname
</param>
</result>
<result name="jsonList" type="json">
<param name="root">jsonList</param>
<param name="excludeProperties">
<!-- 分析结构:[0].account.aname,[1].account.apass,[2].account.agrade -->
\[\d+\]\.account
</param>
</result>

<result name="jsonDate" type="json">
<param name="root">jsonMap</param>
<param name="excludeProperties">

</param>
</result>

<result name="stream" type="stream">
<param name="inputName">inputStream</param>
</result>
</action>

*************在浏览器中输入http://localhost:8080/advertise/category_queryAll.action***************

显示的json格式是:

{
"advertise": {
"account": {
"agrade": 0,
"aid": 2,
"alogin": "admin",
"aname": "大邓",
"apass": "admin"
},
"adCoverPath": "test.jpg",
"adId": 1,
"adName": "银魂",
"adPath": "test2.jpg",
"adSum": 10,
"adType": "0",
"advertiseUser": {
"gold": "0",
"icon": "http://192.168.1.113:8080/advertise/image/defaultUserIcon.png",
"id": 2,
"income": "0",
"iscommons": "0",
"mood": "这家伙很懒~,什么都没有留下ToT",
"name": "邓锦鸿",
"password": "15545450381",
"phone": "15545450381",
"rmb": "0",
"usertype": "1"
},
"clickSum": "0",
"description": "银魂"
},
"chot": true,
"cid": 1,
"coverImage": "cover.jpg",
"ctype": "建材广告"
}

或者这么看比较好


我在Category表中加了一条数据,就是一个广告类别,在广告表中加了五条相同的数据,对应的都是同一个类别,只是adId不同而已,我想要在显示的json格式里面的advertise是一个List,就是我想查询一个类别的时候,把该类别下的所有广告都查询出来,一次性返回给前台,请各位大虾帮帮我呀T.T
...全文
1227 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
靠谱么 2017-10-11
  • 打赏
  • 举报
回复
json在action中返回的时候有固定的形式 你把你查询的list用json封装好 传到前台就可以了
  • 打赏
  • 举报
回复
引用 2 楼 qq_39912309 的回复:
action层你返回的有问题
哪里有问题,可以给我说说嘛
靠谱么 2017-10-11
  • 打赏
  • 举报
回复
引用 5 楼 weixin_39026227 的回复:
[quote=引用 4 楼 qq_25371977 的回复:] json在action中返回的时候有固定的形式 你把你查询的list用json封装好 传到前台就可以了
可以给我举个例子吗!谢谢[/quote] JSONObject object = JSONObject.fromObject(map); response.setCharacterEncoding("UTF-8"); renderHtml(response, object.toString(), "encoding:UTF-8"); 这个是map的 可以将list放到map里 也可以用jsonarray
  • 打赏
  • 举报
回复
引用 4 楼 qq_25371977 的回复:
json在action中返回的时候有固定的形式 你把你查询的list用json封装好 传到前台就可以了
可以给我举个例子吗!谢谢
qq_39912309 2017-10-10
  • 打赏
  • 举报
回复
action层你返回的有问题
小刀雨斑 2017-10-09
  • 打赏
  • 举报
回复
return JSON.toJSONString(你的对象)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧