Struts2 How to Return a JSON Response [duplicate]

2020-05-18 16:30发布

I am currently creating a web-application where the users can fetch tags from the database as JSON,

here is my struts action

public String execute(){


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

    return "success";
}

UPDATE:

The tagsAsJson is already in a JSON format all I want is to return only that, and not the whole class action itself.

It returns something like this

This is the data I want to return to the user

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

How do I return the tagsAsJson as a r JSON esponse? since that JSON response will be used by the client side code.

4条回答
smile是对你的礼貌
2楼-- · 2020-05-18 17:15

To return a JSON response you need to include the struts2-json-plugin-2.x.x.jar file in your project build path You will need to set package extends="json-default" result type is json.

struts2-json-plugin-2.x.x.jar file allows you to serialize the Action class attribute which has setters into a JSON object.

Get the jar dependencies from maven

  <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>

You can get the complete help from this link...

Struts 2 and JSON response

查看更多
干净又极端
3楼-- · 2020-05-18 17:16

In Action class put below code.

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

In JSP put below code

<%@ 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 />

This will print JSON data if you want to manipulate JSON data you cat the data in var <s:set> tag and access the variable in entire page.

查看更多
在下西门庆
4楼-- · 2020-05-18 17:20

Try using the response's PrintWriter.

Java

    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;
   }
查看更多
仙女界的扛把子
5楼-- · 2020-05-18 17:27

Use the Struts "JSON Plugin".

Quite easy, three steps:

Just include it in your maven project like this

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

Declare the field you'd like to return as JSON string like the field of your action, provide the getter and 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;
    }
}

And, finally, put this in your 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>

Pay attention to <param name="root">jsonString</param>. This piece of xml tells Struts2 that this exact property should be considered as a root for JSON serialization. So only the named property (and below, if it's a map or whatsoever) will be returned in a JSON response.

Thanks to the JSON Plugin the content type will be correct.

"JSON Plugin" documentation is here: http://struts.apache.org/release/2.3.x/docs/json-plugin.html

查看更多
登录 后发表回答