我正在尝试创建这样的简单REST请求处理程序:
@RequestMapping(value = "test", method = RequestMethod.GET)
public String test(@RequestParam(name = "test", required = false) String test,
@RequestParam(name ="number", required = false) Long number) {
return new StringBuilder(test).append(" ").append(number).toString();
}
但是当我用CURL测试时:
curl http://localhost:8080/test?test=abc&number=2016
输出如下:
abc null
这里有什么问题?这是我的错误还是Spring bug? 我正在使用Spring Boot 1.4.0(可能是最新版本)。 卷曲版本是7.43.0(64位)。
答案 0 :(得分:3)
希望这是解决方案,而不是错误的假设:
如果你真的输入:
curl http://localhost:8080/test?test=abc&number=2016
你的卷曲过程
curl http://localhost:8080/test?test=abc
&
。,将在后台执行并发送
尝试:
curl 'http://localhost:8080/test?test=abc&number=2016'
。
答案 1 :(得分:0)
在Windows 8.1上使用cmder的卷曲。使用多个Spring @RequestParam批注遇到相同的问题。用单引号将网址包装起来并不能解决我的问题,但双引号可以按预期工作。
不使用引号的方法:
curl http://localhost:8080/jobs/test%20name/find?jobTime=jobtime&jobDate=jobdate
将产生 400错误的请求错误,因为jobDate参数在Spring控制器中标记为必需。
单引号方法:
curl 'http://localhost:8080/jobs/test%20name/find?jobTime=jobtime&jobDate=jobdate'
将产生'jobDate'被识别为内部或外部命令,可操作程序或批处理文件。错误
双引号将按预期运行:
curl "http://localhost:8080/jobs/test%20name/find?jobDate=jobdate&jobTime=jobtime"
从控制器类中产生了正确的输出。
如果通过浏览器地址栏执行,相同的GET请求也可以正常工作,而无需使用任何引号。