我希望使用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方法。
答案 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)
{
}