如何指定struts2返回我们需要的json类型数据?
今天下午做项目的时候,明明可以查到数据,可是就是没有在客户端进行显示,把所有前台代码扫了几遍,都不能找到原因,通过查看返回的json代码,发现有很多多余的返回内容,也就是这些多余的返回内容造成了前台解析的错误,经过上网查询找到了解决的办法:
处理请求的Action:
package com.hpu.action;
import java.util.List;
import javax.annotation.Resource;
import com.hpu.pojo.Commodity;
import com.hpu.service.CommodityService;
import com.opensymphony.xwork2.ActionSupport;
public class CommodityAction extends ActionSupport {
private Double agio;
private List<Commodity> commodities;
private CommodityService commodityService;
private Integer limit;
private String msg;
private String name;
private Double price;
private Integer recordSize;
private Integer start;
private boolean success;
/**商品信息录入
* @author qinrui
* @see commodityService
* @return String
*/
public String add() {
// 根据商品名获取商品
Commodity commodity = commodityService.loadByName(name);
// 商品不存在,将新商品保存起来
if(commodity == null) {
// 创建商品对象
commodity = new Commodity();
// 设定商品属性
commodity.setName(name);
commodity.setPrice(price);
commodity.setAgio(agio);
// 保存商品
commodityService.save(commodity);
success = true;
msg = "商品录入成功";
} else {
success = false;
msg = "商品已经存在";
}
return SUCCESS;
}
public Double getAgio() {
return agio;
}
public List<Commodity> getCommodities() {
return commodities;
}
public Integer getLimit() {
return limit;
}
public String getMsg() {
return msg;
}
public String getName() {
return name;
}
public Double getPrice() {
return price;
}
public Integer getRecordSize() {
return recordSize;
}
public Integer getStart() {
return start;
}
public boolean isSuccess() {
return success;
}
public String query() {
recordSize = commodityService.loadCommodities().size();
commodities = commodityService.loadCommodities(start , limit);
for(Commodity c : commodities) {
System.out.println(c.getName());
}
return SUCCESS;
}
public void setAgio(Double agio) {
this.agio = agio;
}
public void setCommodities(List<Commodity> commodities) {
this.commodities = commodities;
}
@Resource(name="commodityServiceImpl")
public void setCommodityService(CommodityService commodityService) {
this.commodityService = commodityService;
}
public void setLimit(Integer limit) {
this.limit = limit;
}
public void setMsg(String msg) {
this.msg = msg;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(Double price) {
this.price = price;
}
public void setRecordSize(Integer recordSize) {
this.recordSize = recordSize;
}
public void setStart(Integer start) {
this.start = start;
}
public void setSuccess(boolean success) {
this.success = success;
}
}
我需要查询所有的Commodity,所有要调用query方法,也就是我要返回的内容只需要commodities与recordCode,就行了,可是如果不在struts.xml进行相应的配置,它就会返回所有内容,包括值为null的,那怎样才能让它按照自己的需求返回值呢?下面给出相应的strtus.xml配置:
<action name="commodity_query" class="com.hpu.action.CommodityAction" method="query">
<result type="json">
<param name="includeProperties">commodities.*,recordSize</param>
</result>
</action>
解释:由于commodities是个集合类型,如果只写上commodities的话,就会返回一个空的集合,而要返回集合里面的元素就要改成commodities.*,而要返回值中间使用逗号作为间隔符,includeProperties表示要返回内容,如果想要去掉不想要的内容使用excludeProperties即可。
参考文章:http://biancheng.dnbcw.info/java/408867.html