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