Как выполнить действие для приема динамических данных JSON из пользовательского интерфейса в Struts 2?

#json #struts2

Вопрос:

Я хотел бы иметь Action класс, который должен принимать строку JSON, созданную из пользовательского интерфейса, без установщика и получателя в Action классе.

Возможно ли это? Если да, то каким соглашениям мне нужно следовать в Action классе и в файлах конфигурации ( struts.xml )?

Комментарии:

1. Почему без геттера и сеттера? Я мог бы объяснить тебе иначе.

2. У меня есть много статических форматов json, встроенных в файлы сценариев java, в зависимости от контекста страницы, мне нужно отправить эти статические строки json в соответствующие классы действий

3. XSS paradise O_O Загружает их с сервера, а не с клиента :////

4. Нет смысла ожидать, что это будет возможно без сеттера. Строка JSON-это просто строка. Предоставьте свойство string. Установите его. Простой. Вы можете анализировать его так, как хотите, например, с помощью Google GSON и т. Д.

Ответ №1:

Опубликуйте их как контент с типом "application/json" . Вы можете сделать это с помощью простого вызова Ajax jQuery, в котором вы можете указать content-type и dataType .

 $.ajax({
   type: "POST",
   url: "/the/action/url",     
   data : {},
   dataType:"JSON",
   contentType: "application/json; charset=utf-8"
});
 

Добавьте плагин json в зависимости проекта с json-lib-2.3-jdk15.jar помощью . Плагин, поставляемый с перехватчиком json , который считывает и заполняет действие из запроса.

Если вы не хотите заполнять действие, вам не следует использовать этот перехватчик. Вместо этого вручную проанализируйте запрос с помощью этой или любой другой сторонней библиотеки, чтобы получить JSONObject класс. Или вы можете переписать перехватчик и прокомментировать код, использующий JSONPopulator класс, но десериализовать объект с помощью JSONUtil класса.

Кроме того, вы можете найти эти примеры полезными при ручном создании/анализе данных JSON.

Ответ №2:

Если вы хотите отправить объект JSON с несколькими парами ключ-значение в нем и хотите получить эти значения ключей в своем классе действий без создания каких-либо установщиков/получателей,

В объявлении класса действий мы должны реализовать ServletRequestAware и переопределить метод setServletRequest() и установить атрибут HttpServletRequest

 public class YourClass extends ActionSupport implements ServletRequestAware

private HttpServletRequest request;

@Override
public void setServletRequest(HttpServletRequest request) {
    this.request = request;
}

public HttpServletRequest getServletRequest() {
  return this.request;
}
 

И в нашей целевой функции мы должны использовать указанный выше объект запроса, чтобы получить параметр (по его имени, как он задан в json в качестве ключа).:

 public String fetchData() {
  String key1Data = getServletRequest().getParameter("key1");
   String key2Data = getServletRequest().getParameter("key2"); 
  return SUCCESS;
 }
 

Где ваш объект JSON должен содержать данные примерно такие:

 var jsonData = {"key1": "Hello", "key2":"There"};