Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Struts2 RESTful插件POST请求中返回响应_Java_Struts2_Struts2 Rest Plugin - Fatal编程技术网

Java 在Struts2 RESTful插件POST请求中返回响应

Java 在Struts2 RESTful插件POST请求中返回响应,java,struts2,struts2-rest-plugin,Java,Struts2,Struts2 Rest Plugin,我从这里获取信息,实现了Struts2 REST API 在Struts2的restful插件中是否有返回自定义响应的方法。 我做了所有必要的修改,比如 struts.rest.content.restrictToGET=false 从 但我还是犯了这个错误 No result defined for action `com.web.Controller.RestDemoController` and result create, 如果我不添加上面的行,我仍然会得到相同的响应 这是我在s

我从这里获取信息,实现了Struts2 REST API

在Struts2的restful插件中是否有返回自定义响应的方法。 我做了所有必要的修改,比如

struts.rest.content.restrictToGET=false
从 但我还是犯了这个错误

No result defined for action `com.web.Controller.RestDemoController` and result create, 
如果我不添加上面的行,我仍然会得到相同的响应

这是我在
struts.xml
中提供的操作:

<constant name="struts.rest.content.restrictToGET" value="false"/>

你可以看到我得到的回应。我为post编写的方法写在上面,名为create。我确实在主体中有数据,并且我确实在create方法中完美地获得了数据

正如我在多个例子中看到的,现在在帖子中

,

我不想像这些应用程序那样返回post请求的响应。我想返回我自己的响应,它将是一个状态码和一条类似这样的消息

<?xml version="1.0" encoding="UTF-8"?> <Status><code>200</code><message>Success</message></Status>

在调试之后,在Struts2 REST插件中发现<代码> Debug TraceType HANDLILE管理器< /代码>考虑<代码> XHTML<代码>作为默认模板。而它应该是XML或JSON

我想回去

 code : 1xx,2xx,4xx
 message: Success, Fail
在接受POST请求时使用XML或JSON


(这是一个既能处理非restful请求又能处理restful请求的应用程序。我可以将xml或json作为默认模板,但我不希望这样做,因为这会影响非restful请求。)

您误解了struts2 rest插件使用的内容类型的概念

除了提供RESTful URL到控制器的映射之外( 操作)调用时,REST插件还提供 生成资源数据的多个表示形式。默认情况下 插件可以返回以下内容类型的资源:

  • HTML
  • XML
  • JSON
这里没有任何配置,只需添加内容类型扩展 到您的RESTful URL。框架将处理其余部分。那么,为了 实例,假设一个名为Movies的控制器和一个具有
id
superman
,以下URL将全部命中

http://my.company.com/myapp/movies/superman
http://my.company.com/myapp/movies/superman.xml
http://my.company.com/myapp/movies/superman.xhtml
http://my.company.com/myapp/movies/superman.json
注意,这些内容类型支持作为传入数据类型 好。如果需要,还可以通过编写 您自己的
org.apache.struts2.rest.handler.ContentTypeHandler
和注册 他们用这个系统

插件服务器按内容类型请求,要么作为操作扩展提供,要么提供数据类型。传入数据类型由
“内容类型”
标题定义,传出数据类型由
“接受”
标题定义

要使
POST
请求返回数据,您需要在Struts配置文件
Struts.xml
中添加一个常量:

<constant name="struts.rest.content.restrictToGET" value="false"/>

这就是我需要的解决方案。我所做的是

@Override
public Object getModel() {
        <!-- Changed name of the object overhere to mainObject-->
    if (mainObject == null) {
        if (responseObject != null) {
            return responseObject;
        } else if (mainObject != null) {
            return mainObject;
        }
        mainObject = new mainObject();
    }
    return mainObject;
}

这不清楚您为什么需要重写
ContentTypeHandlerManager
,它对您没有帮助。链接是绝对没有你的问题。我将把这个话题划掉,没有人有兴趣深入研究Struts2的内部结构,如果有的话,没有明确的问题陈述,没有代码,询问XY问题。@Roman C如果你看到顶部,我特别说我想要一个自定义响应发送给客户端。它可以是xml或json。在那之后,你会看到当我做一个post请求时,我会得到什么样的响应。请您说明您需要什么样的更多信息才能使这个问题更适合。我已经提供了post请求调用的代码,并且我还提供了post请求后的结果,该结果高于代码。没有为操作定义的结果意味着Struts无法找到操作的结果。在进一步挖掘之前,请尝试修复此问题。@AleksandrM我们真的需要struts2中rest api的结果吗?它不应该返回一个成功或失败的响应吗?我按照文件所说的做了。当我发送像or.json这样的请求时,它会相应地返回数据,我唯一找不到的是,我想返回我的自定义响应,而不是像在struts2 rest showcase中那样重定向它。我已经更新了问题SIT通过重定向并在httpheaders中提供位置id来返回post响应,我不想这样做,简单的说,我想直接返回一些自定义消息,而不是重定向。它在响应中返回
location
头,但它没有重定向,请参阅返回的状态代码。明白了,但不知何故,在位置上,您给出了URI。我不想这样做。我只想返回一条消息,您可以通过向操作添加属性来返回该消息。
@Override
public Object getModel() {
        <!-- Changed name of the object overhere to mainObject-->
    if (mainObject == null) {
        if (responseObject != null) {
            return responseObject;
        } else if (mainObject != null) {
            return mainObject;
        }
        mainObject = new mainObject();
    }
    return mainObject;
}
if (paramObject instanceof MainObject) {
        MainObject mainObject = (MainObject) paramObject;
        writer.write(mapper.writeValueAsString(mainObject));
} else if (paramObject instanceof ResponseObject) {
        ResponseObject responeObject = (ResponseObject) paramObject;
        writer.write(mapper.writeValueAsString(responeObject));
}