我在春天有这个控制器
@RestController
public class GreetingController {
@RequestMapping(value = "/greeting", method = RequestMethod.POST)
public String greeting(@RequestParam("uouo") String uouo) {
return uouo;
}
}
当我测试它时
curl -k -i -X POST -H "Content-Type:application/json" -d uouo=test http://192.168.1.104:8080/api/greeting
测试结果
HTTP状态400 - 必需的字符串参数' uouo'不存在
我尝试了可能的事情,但我认为@RequestParam
不能用于POST它总是使用GET传递URL中的参数,只有在我使用{{1}将对象JSON作为参数时才使用post有没有办法使用POST发送字符串参数?
答案 0 :(得分:7)
如果内容类型为application/x-www-form-urlencoded
,Servlet容器将仅为POST请求提供身体参数。如果内容类型是其他内容,它将忽略正文。这在Servlet Specification Chapter 3.1.1 When Parameters Are Available
以下是发布表格之前必须满足的条件 数据将填充到参数集:
- 请求是HTTP或HTTPS请求。
- HTTP方法是POST。
- 内容类型为
application/x-www-form-urlencoded
。- servlet已对请求对象上的任何
醇>getParameter
系列方法进行了初始调用。如果不符合条件且未包含表格数据 在参数集中,后期数据必须仍然可用 servlet通过请求对象的输入流。如果条件是 遇到后,表格数据将不再可供直接阅读 来自请求对象的输入流。
由于您没有发送任何JSON,只需设置适当的内容类型
即可curl -k -i -X POST -H "Content-Type:application/x-www-form-urlencoded" -d uouo=test http://192.168.1.104:8080/api/greeting
或让curl
推断
curl -k -i -X POST -d uouo=test http://192.168.1.104:8080/api/greeting?uouo=test
请注意,您仍然可以在网址
中传递查询参数curl -k -i -X POST -H "Content-Type:application/json" http://192.168.1.104:8080/api/greeting?uouo=test