【问题标题】:Resteasy FrameWork POST not workingResteasy FrameWork POST 不工作
【发布时间】:2012-04-19 15:52:12
【问题描述】:

我希望使用 RestEasy 框架的仅界面选项,因为它更简洁并且应该可以工作。

但我在 POST 请求中传递参数时遇到问题。

我在文档中找到了这个例子:

@PUT
@Path("basic")
@Consumes("text/plain")
void putBasic(String body);

然后调用:

import org.jboss.resteasy.client.ProxyFactory;
// ...

// this initialization only needs to be done once per VM
RegisterBuiltin.register(ResteasyProviderFactory.getInstance());

SimpleClient client = ProxyFactory.create(SimpleClient.class, "http://localhost:8081");
client.putBasic("hello world");

我尝试了以下方法:

@POST
@Consumes(MediaType.TEXT_PLAIN)
@Path("http://localhost:8080/app/resource")
String postBasic(String body);

并被调用:

RegisterBuiltin.register(ResteasyProviderFactory.getInstance());

RepoClient client = ProxyFactory.create(RepoClient.class, "");
client.postBasic("hi");

在调用的servelet的doPost方法上打印参数Map(并调试)时,参数为空。我真的看不出我的方法和记录在案的方法(来自这里:Resteasy interface example)之间的区别。

所以总结一下,只使用接口声明和代理实现如何发送POST参数?

解决方案:正如预期的那样...只需使用接收到的参数相应地声明消耗,它就可以工作...问题是在另一个 servlet 中调用 servlet 的 POST 方法。

【问题讨论】:

    标签: rest resteasy


    【解决方案1】:

    在您的 POST 示例中,@Path 不能包含绝对 URL。尝试只输入/app/app/resource,具体取决于您的配置。

    【讨论】:

    • 刚刚试了...servlet实际上被调用...但是没有请求参数
    • 您是否在不同的可执行文件中调用服务器?请注意,您使用 empty 基本 URL 创建了一个 ProxyFactory,那么它是否真的通过网络(甚至通过环回)连接到服务器?
    • 我会检查在 servlet 中调用 post 方法是否有问题
    • 好的。您还可以使用任何网络嗅探器(如wireshark)来查看您是否真的通过网络发送包。
    • 我不熟悉它,但是 POST 太基础了,应该支持它:)
    【解决方案2】:

    正如怀疑者所说,@Path 应该是一个相对 url,我只有 Jersey 的经验,我对 Resteasy 不熟悉,但我认为这是一样的。

    您的类将有一个@Path 注解,其中的方法可以有一个@Path 注解。

    如果你有这样的事情:

        @POST
        @Path( "Foo" )     
        public class Foo()
        {
          @POST
          @Path( "Bar" )
          public String Bar()
          {
            ...
          }
        }
    

    所以对http://localhost:8080/Foo/Bar 的POST 将执行方法Bar。

    我的评论太长了,所以我就在这里补充一下。

    抱歉,直到之后我才看到您对质疑者的评论。您要使用的示例是否使用@FormParam?

    鉴于,我是 REST 新手,但到目前为止,每个 @POST 方法都必须使用 @PathParam 或 @FormParam,您的方法看起来像这样:

        @Post
        @Path( "Foo/{foobar}" )
        public String Bar(@PathParam( "foobar" ) String foobar)
        {
        }
    

    或喜欢

        @Post
        @Path( "Foo" )
        public String Bar(@FormParam( "foobar" ) String foobar)
        {
        }
    

    【讨论】:

    • 问题与@Path无关...调用了servlet中的post方法但没有传递字符串参数
    • 对不起,直到之后我才看到你对质疑者的评论。您要使用的示例是否使用@FormParam?
    • nop...看看我发布的链接...这是一个简单的帖子
    • 我在编辑中添加了一些内容,但我认为这不会有帮助。我想知道这是我还没有做的事情,还是泽西岛和 Resteasy 的区别?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2015-11-21
    • 2014-05-07
    • 2012-04-12
    相关资源
    最近更新 更多