我有这个api:
@Path("test")
@GET
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public Parameter performTest(Parameter in) {
System.out.println(in);
}
,但是in始终返回null。我可以将@GET更改为@POST,并且可以正常工作,但是我并没有真正执行创建或更新操作,因此使用post似乎很奇怪。
有没有一种方法可以通过球衣获得GET请求?
答案 0 :(得分:3)
TL; DR 正确的解决方案是使用POST。
“我可以将@GET更改为@POST,并且可以,但是我并没有真正执行创建或更新操作,因此使用post似乎很奇怪”
为什么这么奇怪? POST不仅限于创建/更新操作。
规范(RFC 7231, section 4.3.3. POST)表示:
POST方法根据资源自身的特定语义请求目标资源处理包含在请求中的表示形式。例如,POST用于以下功能(以及其他功能):
为数据处理过程提供一块数据,例如以HTML形式输入的字段;
在公告板上,新闻组,邮件列表,博客或类似的文章组中发布消息;
创建尚未由原始服务器识别的新资源;和
将数据追加到资源的现有表示形式。
换句话说,POST的意思是“这里有一些数据,请为我处理”。
当然,“过程”在创建/更新中通常意味着“存储”,但这并不是处理数据的唯一方法。
在您的情况下,“过程”表示“使用这些参数运行测试”。