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