Resteasy FrameWork POST无法正常工作

时间:2012-04-19 15:52:12

标签: rest resteasy

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

总而言之,只有使用Interface声明和代理实现,我该如何发送POST参数?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

正如怀疑者所说,@ Path应该是一个相对的网址,我只有泽西的经验,我不熟悉Resteasy,但我认为这将是相同的。

您的类将具有@Path注释,并且其中的方法可以具有@Path注释。

所以如果你有这样的事情:

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

因此,http://localhost:8080/Foo/Bar的POST将执行方法栏。

我的评论越来越长,所以我会在这里解决。

抱歉,直到之后我才看到你对怀疑者的评论。你要使用的例子是@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)
    {
    }