Resteasy框架POST不工作

Resteasy框架POST不工作,rest,resteasy,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 on

我希望使用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
方法上打印参数映射(并调试它)时,参数为空。我真的看不出我的方法和有文档记录的方法之间有什么区别

总之,仅使用接口声明和代理实现如何发送POST参数


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

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

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

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

所以如果你有这样的东西:

    @POST
    @Path( "Foo" )     
    public class Foo()
    {
      @POST
      @Path( "Bar" )
      public String Bar()
      {
        ...
      }
    }
    @Post
    @Path( "Foo/{foobar}" )
    public String Bar(@PathParam( "foobar" ) String foobar)
    {
    }
因此,POST to将执行方法栏

我的评论越来越长了,所以我只在这里加上它


对不起,我在之后才看到你对怀疑者帖子的评论。您要退出的示例是否使用@FormParam

给定,我对REST是新手,但到目前为止,每个@POST方法都必须使用@PathParam或@FormParam,您的方法如下所示:

    @POST
    @Path( "Foo" )     
    public class Foo()
    {
      @POST
      @Path( "Bar" )
      public String Bar()
      {
        ...
      }
    }
    @Post
    @Path( "Foo/{foobar}" )
    public String Bar(@PathParam( "foobar" ) String foobar)
    {
    }
或者

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

刚刚尝试过…servlet实际上被调用了…但是没有请求参数您是在另一个可执行文件中调用服务器的吗?请注意,您使用空的基本URL创建了一个
ProxyFactory
,那么它真的通过网络(甚至通过环回)连接到服务器吗?我将检查在servlet中调用post方法是否是issueOK。您还可以使用任何网络嗅探器(如wireshark)来查看您是否真的通过网络发送包。我不熟悉它,但POST非常基本,它应该支持它:)问题与@Path无关…servlet中的POST方法被调用,但字符串参数没有传递给itSorry,直到之后我才看到你对怀疑者帖子的评论。你要退出的示例是否使用了@FormParam?不…看看我发布的链接…这是一个简单的帖子,我在编辑中添加了一些内容,但我认为这不会有帮助。我想知道这是否是我还没有做过的事情,或者这是否是新泽西和Resteasy的区别?