SSH整合之Struts2的JSON数据返回

本文介绍了在Struts框架中返回JSON数据的两种方法:使用流返回数据和直接指定返回JSON。通过具体示例展示了如何实现这两种方法,并讨论了如何通过继承来减少代码重复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面的话:之前一直从事SpringMVC+Mybatis/Hibernate的开发,而SpringMVC做json返回对比于Struts简直是。。。首次接触Struts,其实Struts也是个挺简单的工具,个人感觉凡是工具,就不会太难,否则框架也就失去了存在的意义

上月底跳槽来到现在的公司,恰好遇到现在的项目,接近尾声,使用的ssh,是个二次开发项目,6年前(2010年)的老代码了,没有注释,没有数据库设计文档,还发现不少问题,不少的json数据都采用 jsp视图的方式转发,当时写这个代码的兄弟。。。。

Struts提供了多种返回JSON数据的方法

方式一、使用流的方式,把数据返回

protected void getResultView(boolean result, String resultMsg, Object resultData){
		Map<String, Object> jsonView = new HashMap<>();
		jsonView.put("success", result);
		jsonView.put("resultMsg", resultMsg);
		jsonView.put("resultData", resultData);
		setInputStream(new ByteArrayInputStream(JSON.toJSONBytes(jsonView)));
		
	}
public InputStream getInputStream() {return inputStream;}

 此时需要指定返回的数据类型,顺带做IE的兼容 、注意需要get方法否则客户端无法取得json数据

@Result(type = "stream",params = {"contentType","text/html;charset=UTF-8","inputName","inputStream"})

方法二:指定返回json

@ParentPackage("json-default")  
public class JsonView{  
   private InputStream inputStream;  
   Map<String, Object> jsonView;  
   /** 
    * 默认返回成功  
    * {success: true,resultMsg: "ok"} 
    * @return 
    */  
   protected void getResultView() {  
       getResultView(true, "ok");  
   }  
   /** 
    * {success: true,resultMsg: "自定义"} 
    * @param result true成功  false 失败 
    * @param resultMsg 自定义返回字符串消息 
    * @return  
    */  
   protected void getResultView(boolean result, String resultMsg) {  
  
      getResultView(result, resultMsg, null);  
   }  
  
   /** 
    *{success: true,resultMsg: "OK",resultDate[]} 
    * @param resultData 需要返回的数据 
    * @return 
    */  
   protected void getResultView(Object resultData) {  
  
       getResultView(true, "ok", resultData);  
   }  
   /** 
    * {success: true,resultMsg: "操作成功",resultDate[]} 
    * @param result----boolean类型(true成功   false 失败) 
    * @param resultMsg--- String类型 json响应的文本信息描述   
    * @param resultData Object类型 json返回的数据  
    * @return 
    */  
   protected void getResultView(boolean result, String resultMsg, Object resultData){  
      jsonView = new HashMap<>();  
      jsonView.put("success", result);  
      jsonView.put("resultMsg", resultMsg);  
      jsonView.put("resultData", resultData);  
  
   }  
  
   public Map<String, Object> getJsonView() {  
      return jsonView;  
   }  
  
   public void setJsonView(Map<String, Object> jsonView) {  
      this.jsonView = jsonView;  
   }  
}  

 在返回的方法上添加注解,使用xml的配置也是一样的

@Action(value="get",results={@Result(type = "json", params = {"contentType","text/html;charset=UTF-8","root" ,"jsonView"})})

为了给Action瘦身,到达代码复用的目的,可以通过继承的方式,使得Action类更加干练

@Namespace("/test")
public class AccountAction extends JsonView{
   private static final Logger logger = Logger.getLogger(AccountAction.class);
   public String setAccount() {
      return ActionSupport.SUCCESS;
   }
   @Action(value="get",results={@Result(type = "json", params = {"contentType","text/html;charset=UTF-8","root" ,"jsonView"})})
   public String getJson(){
      logger.info("test Json");
      Account account = new Account();
      account.setId(110);
      account.setUsername("dhweicheng");
      account.setPassword("147258");
      getResultView(account);//调用json工具,
      return  ActionSupport.SUCCESS;
   }
}

后话:

认真阅读一次官方文档还是很有必要的,文档都有演示代码)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值