0

我希望使用 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");

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

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

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

4

2 回答 2

1

在您的 POST 示例中,@Path不能包含绝对 URL。根据您的配置,尝试仅放置/appor 。/app/resource

于 2012-04-19T15:56:32.543 回答
0

正如怀疑者所说,@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)
    {
    }
于 2012-04-19T16:08:53.093 回答