Struts2返回json的几种方式

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:50   970   0

前提:在web项目中,我们不一定全部数据都放在值栈中然后给前端页面取到,更多的时候我们要通过json来给前端页面交互数据,并且结合ajax来实现前端的异步刷新!

什么是JSON:说白了,JSOn就是字符串,只不过他拥有自己的格式,是一种轻量级的数据交换格式,如果现在您还不知道什么是json,那请您先去学习json,再来看这篇文章会大有裨益。

JSON在web项目中占领很重要的地位,当我们使用Sturts2框架时。我们应该怎样返回json给前端呢?


第一种方式:

使用struts2-json-plugin插件:这是Struts2自带的插件!请大家自行下载。

package com.jsontostruts2.action;

import com.googlecode.jsonplugin.annotations.JSON;
import com.jsontostruts2.vo.Users;
import com.opensymphony.xwork2.ActionSupport;

/**
 * <p>
 * 创 建 人:骚年、编程去
 * <p>
 * 创建日期:2014-6-26 
 * <p>
 */
@SuppressWarnings("serial")
public class UserAction extends ActionSupport {

 private Users users;
 
 @JSON(name="USER")
 public Users getUsers() {
  return users;
 }

 public void setUsers(Users users) {
  this.users = users;
 }

 @Override
 public String execute() throws Exception {
  users = new Users();
  users.setUserId(1);
  users.setUserName("ctojxzsycztao");
  users.setSex("男人");
  return SUCCESS;
 }

}
User类我就不贴出来了,大家在这里注意一个地方就是getUser()方法有个@Json(name=”USER“)这里使用了JSON注释,注释时指定了name域,name域指定Action属性被序列化成JSON对象的属性名。而且如果该类里面有多个get方法,应该在不要的get方法前面加上@JSON( serialize=false)则代表不返回该字段

xml配置文件如下

<package name="jsonManager" extends="json-default">
 
  <action name="userJson" class="com.jsontostruts2.action.UserAction">
   <result type="json"/>
  </action>
  
  <action name="jsonlist" class="com.jsontostruts2.action.UserListAction">
   <result type="json"/>  

  </action>
  
 </package>

如果要指定返回的这段还可以这样
 <result type="json" name="success">     
                    <param name="root">result</param>     
            </result> 
result就是你要返回的字段名称,name属性可以不指定,如果指定了name属性之后,那么在前端拿到该数据的时候你应该用你命名的属性来取值。

二、通过stream来返回


package com.jsontostruts2.action;

import java.io.InputStream;
import java.io.StringBufferInputStream;

import com.opensymphony.xwork2.ActionSupport;

public class TextResult extends ActionSupport {
 private InputStream inputStream;

 public InputStream getInputStream() {
  return inputStream;
 }

 public String execute() throws Exception {
  inputStream = new StringBufferInputStream("json");
  return SUCCESS;
 }
}
xml:
<action name="text-result" class="com.jsontostruts2.action.TextResult">
   <result type="stream">
    <param name="contentType">text/html</param>
    <param name="inputName">inputStream</param>
   </result>
  </action>

三、通过response对象返回


package com.jsontostruts2.action;

import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringBufferInputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class TextResult extends ActionSupport {
 
 String result;
 
 public String execute() throws Exception {
  result="jsontest";
  PrintWriter out=ServletActionContext.getResponse().getWriter();
  out.print(result);
  out.flush();
  out.close();
  return SUCCESS;
 }
}
xml:
 <action name="jsontest" class="com.jsontostruts2.action.TextResult">
   <result></result>
  </action>
总结完毕,Struts2现在基本就是这三种方式来返回json。那么如何将对象,集合等格式转换为json格式呢?

推荐用阿里巴巴工程师门开发的fastjson。简单易用。具体方法以后会讲到

转载请指明出处谢谢!1

以上纯属个人理解,欢迎大家指正,不胜感激



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP