Struts2 如何返回 JSON 响应

2022-09-03 16:50:37

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

这是我的支柱动作

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 "}]

如何返回为 r JSON esponse?因为该 JSON 响应将由客户端代码使用。tagsAsJson


答案 1

使用支柱“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>

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

多亏了JSON插件,内容类型将是正确的。

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


答案 2

尝试使用响应的 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;
   }