@Requestparam:无法获取第二个输入的请求参数

时间:2016-08-23 06:57:58

标签: java spring spring-mvc curl

我正在尝试创建这样的简单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位)。

2 个答案:

答案 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请求也可以正常工作,而无需使用任何引号。