14

我目前正在创建一个 Web 应用程序,用户可以在其中从数据库中获取 JSON 格式的标签,

这是我的 struts 动作

public String execute(){


    Gson gson = new Gson();
    String tagsAsJson = gson.toJson(audioTaggingService.findTagsByName(q));
    System.out.println(tagsAsJson);

    return "success";
}

更新:

已经是 JSON 格式了,tagsAsJson我只想返回它,而不是整个类操作本身。

它返回这样的东西

这是我要返回给用户的数据

[{"id":2,"name":"Dubstep","description":"Dub wob wob"},{"id":3,"name":"BoysIIMen","description":"A 1990s Boy Band"},{"id":4,"name":"Sylenth1","description":"A VST Plugin for FLStudio "}]

如何返回tagsAsJsonas ar JSON 响应?因为客户端代码将使用该 JSON 响应。

4

4 回答 4

24

使用 Struts “JSON 插件”

很简单,三个步骤:

只需像这样将它包含在您的 Maven 项目中

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-json-plugin</artifactId>
    <version>${version.struts2}</version>
</dependency>

将您想要返回的字段声明为 JSON 字符串,就像您的操作字段一样,提供 getter 和 setter。

public class Struts2Action extends ActionSupport {

    private String jsonString;

    public String execute() {
        Gson gson = new Gson();
        jsonString = gson.toJson(audioTaggingService.findTagsByName(q));

        return "success";
    }

    public String getJsonString() {
        return jsonString;
    }

    public void setJsonString(String jsonString) {
        this.jsonString = jsonString;
    }
}

最后,将其放入您的 XML 中:

<action name="someJsonAction" class="com.something.Struts2Action">
    <result type="json">
        <param name="noCache">true</param>
        <param name="excludeNullProperties">true</param>
        <param name="root">jsonString</param>
    </result>
</action>

注意<param name="root">jsonString</param>。这段 xml 告诉 Struts2 这个确切的属性应该被视为 JSON 序列化的根。因此,只有命名的属性(以及以下,如果它是地图或其他)将在 JSON 响应中返回。

感谢 JSON 插件,内容类型将是正确的。

“JSON 插件”文档在这里:http ://struts.apache.org/release/2.3.x/docs/json-plugin.html

于 2013-09-03T11:39:51.587 回答
17

尝试使用响应的 PrintWriter。

爪哇

    public String execute()
    {
      Gson gson                    = new Gson();
      String jsonString            = gson.toJson(audioTaggingService.findTagsByName(q));
      HttpServletResponse response = ServletActionContext.getResponse();

      response.setContentType("application/json");
      response.getWriter().write(jsonString );

      return null;
   }
于 2013-09-03T12:18:33.477 回答
2

在 Action 类中放下面的代码。

  public class Struts2Action extends ActionSupport
  {     

    public String jsonString="";

    public String execute()
    {
      Gson gson = new Gson();
      jsonString  = gson.toJson(audioTaggingService.findTagsByName(q));
      System.out.println(jsonString);

      return "success";
   }
  }

在 JSP 中放下面的代码

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<title>Struts Rais</title>

<s:property value="jsonString"/><br />

如果您想操作 JSON 数据,这将打印 JSON 数据,您可以在 var<s:set>标记中查找数据并访问整个页面中的变量。

于 2013-01-30T08:24:17.257 回答
1

要返回 JSON 响应,您需要在项目构建路径中包含struts2-json-plugin-2.xxjar文件您需要将 package extends="json-default"结果类型设置为json

struts2-json-plugin-2.xxjar 文件允许您将具有 setter 的 Action 类属性序列化为 JSON 对象。

从maven获取jar依赖

  <dependencies>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.1.8</version>
</dependency>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-json-plugin</artifactId>
    <version>2.1.8</version>
</dependency>

您可以从此链接获得完整的帮助...

Struts 2 和 JSON 响应

于 2017-04-30T04:28:48.227 回答