gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:11:47 24 4
gpt4 key购买 nike

我使用的是 Struts2,无法使用 request.getInputStream(),因为它在第二次使用时出错,第一次可能已被任何拦截器使用。

所以,我相信一定有某种方法来获取请求正文。但我在网上没有找到任何东西,请帮忙。

最佳答案

正如你所说,拦截器(我猜 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" }

你应该有一个像这样的 Controller (或操作):

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 Action 中,您应该使用 request.getInputStream() 访问请求,但是当 JSONInterceptor 起作用时,只需让他完成工作即可。创建与要在操作/ Controller 中解析的 JSON 元素一样多的字段。在此示例中,我创建一个 String token 字段(及其 setter 和 getter)来保存 JSON 元素“token”的内容。

完成/GET(使用 {"token":"mh5h6jrjkvnrk56"})后,将调用 index() 并且字段 token 的值为“mh5h6jrjkvnrk56” “(如示例所示)。

关于java - 使用struts2-json-plugin时如何获取Struts2中的请求体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21252251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com