Как вы говорите, перехватчик (я думаю, JSONInterceptor) уже выполнил задание раньше для вас. Возможно, у вас есть аналогичные структуры struts.xml:
struts.xml
<constant name="struts.action.extension" value="xhtml,,xml,json,action"/>
<constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper" />
<constant name="struts.mapper.prefixMapping" value="/rest:rest,:struts"/>
<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="rest-default"/>
<constant name="struts.convention.package.locators" value="rest"/>
<constant name="struts.rest.namespace" value="/rest" />
<constant name="struts.rest.negotiation.handlerOverride.application/json" value="json" />
<package name="rest" namespace="/rest" extends="rest-default">
<interceptors>
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
</interceptors>
<action name="yourAction" class="com.struts.rest.MyController">
<interceptor-ref name="json" />
<interceptor-ref name="defaultStack"/>
</action>
</package>
Затем, если вы пытаетесь разобрать запрос JSON как это:
{ "token":"mh5h6jrjkvnrk56" }
Вы должны иметь a Контроллер (или действие):
package com.struts.rest;
import ...
public class MyController implements ModelDriven<Result>{
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(MyController.class.getName());
private String token;
// Handles GET requests
public String index() {
logger.info("token: " + token);
return "index";
}
// Handles /POST requests
public String create(){
// ....
return "create"
}
// Handles /PUT requests
public HttpHeaders update() {
// ....
return "update"
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
В a RequestAware/ServletRequestAware
Действия вы должны получить доступ к запросу с request.getInputStream()
, но когда действует JSONInterceptor, просто дайте ему выполнить эту работу. Создайте столько полей, сколько элементов JSON, которые нужно проанализировать в Action/Controller. В этом примере я создаю поле String token
(с его установщиком и геттером) для хранения содержимого элемента «Junction» JSON.
Когда/GET (с { «маркер»: «mh5h6jrjkvnrk56»}) выполняется, index()
называется и поле token
имеет значение «mh5h6jrjkvnrk56» (как в примере).
Struts 2 StrutsPrepareAndExecuteFilter должен прочитать запрос, чтобы извлечь информацию для заполнения объекта действия и т. Д. Пожалуйста, дайте нам дополнительную информацию о том, что вам нужно восстановить из этого входного потока; что бы это ни было, возможно, Struts 2 уже делает это за вас –
@Jorge_B В моем случае JSON отправляется в тело запроса, в случае какой-либо ошибки, что JSON мне нужно зайти в базу данных, но я не могу получить requestBody. –
Вы получаете незаконное государственное исключение? –