使用struts2-json-plugin时,如何在struts2中获取请求主体



我正在使用struts2和 request.getInputStream(),因为它在第二次使用时会出现错误,因此首先可能已经使用了任何一个拦截器。

所以,我相信必须有某种方法来获得请求体。但是我没有在互联网上找到任何东西,请帮助。

正如您所说,拦截器(我猜JsonInterceptor)已经为您完成了这项工作。可能您有类似的支柱。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" }

您应该有这样的控制器(或操作):

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

RequestAware/ServletRequestAware操作中,您应该使用request.getInputStream()访问请求,但是当JsonInterceptor行动时,请让他完成工作。创建与JSON元素希望在操作/控制器中解析的数量一样多。在此示例中

完成A/Get(使用{" Token":" MH5H6JRJKVNRK56"})时,index()被称为CC_5,并且字段token具有" MH5H6JRJKVNRK56"的值。

最新更新