首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用struts2-json-plugin时在Struts2中获取请求体

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

Stack Overflow用户
提问于 2014-01-21 07:56:38
回答 1查看 2.7K关注 0票数 2

我使用的是Struts2,request.getInputStream()不能使用,因为它在第二次使用时会产生错误,首先可能已经被任何拦截器使用了。

所以,我相信一定有什么办法能得到请求机构。但我在网上没有发现任何东西,请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2016-06-08 06:23:06

正如您所说,拦截器(我猜是JSONInterceptor)已经为您完成了之前的工作。您可能有类似的struts.xml结构:

struts.xml

代码语言:javascript
复制
<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请求:

代码语言:javascript
复制
{ "token":"mh5h6jrjkvnrk56" }

您应该有这样一个Controller (或Action):

代码语言:javascript
复制
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元素希望在Action/Controller中解析的字段。在本例中,我创建了一个String token字段(使用它的setter和getter)来保存JSON元素"token“的内容。

当执行/GET (带有{“令牌”:"mh5h6jrjkvnrk56“})时,将调用index(),字段token的值为”mh5h6jrjkvnrk56“(如示例中所示)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21252251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档