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

时间:2022-09-05 19:41:45
底层使用的是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": "建材广告"
    }

或者这么看比较好
求助!怎么在json数据中返回一个对象的List

我在Category表中加了一条数据,就是一个广告类别,在广告表中加了五条相同的数据,对应的都是同一个类别,只是adId不同而已,我想要在显示的json格式里面的advertise是一个List,就是我想查询一个类别的时候,把该类别下的所有广告都查询出来,一次性返回给前台,请各位大虾帮帮我呀T.T

6 个解决方案

#1


return  JSON.toJSONString(你的对象)

#2


action层你返回的有问题

#3


引用 2 楼 qq_39912309 的回复:
action层你返回的有问题

哪里有问题,可以给我说说嘛

#4


json在action中返回的时候有固定的形式  你把你查询的list用json封装好 传到前台就可以了

#5


引用 4 楼 qq_25371977 的回复:
json在action中返回的时候有固定的形式  你把你查询的list用json封装好 传到前台就可以了


可以给我举个例子吗!谢谢 求助!怎么在json数据中返回一个对象的List

#6


引用 5 楼 weixin_39026227 的回复:
Quote: 引用 4 楼 qq_25371977 的回复:

json在action中返回的时候有固定的形式  你把你查询的list用json封装好 传到前台就可以了


可以给我举个例子吗!谢谢 求助!怎么在json数据中返回一个对象的List


JSONObject object = JSONObject.fromObject(map);
response.setCharacterEncoding("UTF-8");
renderHtml(response, object.toString(), "encoding:UTF-8");

这个是map的 可以将list放到map里 也可以用jsonarray

#1


return  JSON.toJSONString(你的对象)

#2


action层你返回的有问题

#3


引用 2 楼 qq_39912309 的回复:
action层你返回的有问题

哪里有问题,可以给我说说嘛

#4


json在action中返回的时候有固定的形式  你把你查询的list用json封装好 传到前台就可以了

#5


引用 4 楼 qq_25371977 的回复:
json在action中返回的时候有固定的形式  你把你查询的list用json封装好 传到前台就可以了


可以给我举个例子吗!谢谢 求助!怎么在json数据中返回一个对象的List

#6


引用 5 楼 weixin_39026227 的回复:
Quote: 引用 4 楼 qq_25371977 的回复:

json在action中返回的时候有固定的形式  你把你查询的list用json封装好 传到前台就可以了


可以给我举个例子吗!谢谢 求助!怎么在json数据中返回一个对象的List


JSONObject object = JSONObject.fromObject(map);
response.setCharacterEncoding("UTF-8");
renderHtml(response, object.toString(), "encoding:UTF-8");

这个是map的 可以将list放到map里 也可以用jsonarray