Struts2 Как вернуть ответ JSON

В настоящее время я создаю веб-приложение, в котором пользователи могут извлекать теги из базы данных как JSON,

вот мое действие на стойках

public String execute(){


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

    return "success";
}

UPDATE:

tagsAsJson уже в формате JSON, все, что я хочу, это вернуть только это, а не все действие самого класса.

Он возвращает что-то вроде этого

Это данные, которые я хочу вернуть пользователю

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

Как вернуть tagsAsJson в качестве rs-ответа JSON? так как этот ответ JSON будет использоваться кодом на стороне клиента.

Ответ 1

Используйте Struts "JSON Plugin" .

Довольно легко, три шага:

Просто включите его в свой проект maven, как этот

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

Объявите поле, которое вы хотите вернуть как строку JSON, как поле вашего действия, укажите получателя и сеттер.

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 Plugin находится здесь: http://struts.apache.org/release/2.3.x/docs/json-plugin.html

Ответ 2

Попробуйте использовать ответ 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;
   }

Ответ 3

В классе 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> и получаете доступ к переменной на всей странице.

Ответ 4

Чтобы вернуть ответ JSON, вам нужно указать файл struts2-json-plugin-2.xxjar в пути создания проекта. Вам нужно будет установить пакет extends = "json- по умолчанию" : json.

Файл struts2-json-plugin-2.x.x.jar позволяет сериализовать атрибут класса Action, который имеет сеттеры в объект JSON.

Получить зависимости jar от 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>

Вы можете получить полную помощь по этой ссылке...

Ответы Struts 2 и JSON