Spring只返回查询字符串中的第一个参数

时间:2015-09-24 18:53:49

标签: spring spring-mvc curl spring-web

Spring只返回查询字符串中的第一个参数,后续参数缺失。

使用curl调用以下网址时<:p>

 curl -i -X GET -b usercookie.txt -c usercookie.txt http://localhost:8080/appname/users/user-id/campaigns?title=JSON&itemPerPage=5&page=0&orderBy=startDate

只有title param具有非空值,request.getQueryString()仅包含&#34; title = JSON&#34;

打电话给这个时:

curl -i -X GET -b usercookie.txt -c usercookie.txt http://localhost:8080/appname/users/user-id/campaigns?page=0&title=JSON&itemPerPage=5&orderBy=startDate

request.getQueryString()仅包含&#34; page = 0&#34;

控制器代码:

@Controller
public class Campaign {

...

    @RequestMapping(value = {"/users/{userId}/campaigns", "/users/{userId}/campaigns/"}, 
            method = RequestMethod.GET)
    @ResponseBody
    public CampaignListResponse getCampaignList(
            @PathVariable(value="userId") String reqUserId,
            @RequestParam(required=false) Integer page, 
            @RequestParam(required=false) Integer itemPerPage,
            @RequestParam(required=false) String orderBy,
            @RequestParam(required=false) String status,
            @RequestParam(required=false) String title,                                         
            HttpServletRequest request,
            HttpServletResponse response,
            @CookieValue("session") String session) {
        LOGGER.debug("reqUserId:{} page:{}, itemPerPage:{}, orderBy:{}, state:{}, title:{}", reqUserId, page, itemPerPage, orderBy, status, title);
        LOGGER.debug("query string:{}", request.getQueryString());
...

这可能是什么原因?我希望以下所有参数在request.getQueryString()和@RequestParam变量中都有一个值:

page=0&title=JSON&itemPerPage=5&orderBy=startDate

编辑春季版:3.2.2

2 个答案:

答案 0 :(得分:3)

从您的终端只需将整个网址放在双引号之间! &amp; 是一个特殊字符,要求任务在后台运行。您无需更改代码。

试试这个:

curl -i -X GET -b usercookie.txt -c usercookie.txt "http://localhost:8080/appname/users/user-id/campaigns?title=JSON&itemPerPage=5&page=0&orderBy=startDate"

答案 1 :(得分:0)

您是否尝试明确指定请求参数的名称?

当我指定它们时,它对我有用:

@RequestMapping({"/users/{userId}/campaigns", "/users/{userId}/campaigns/"})
@ResponseBody
public void getCampaignList(
    @PathVariable(value="userId") String reqUserId,
    @RequestParam(value = "page", required=false) Integer page, 
    @RequestParam(value = "itemPerPage", required=false) Integer itemPerPage,
    @RequestParam(value = "orderBy", required=false) String orderBy,
    @RequestParam(value = "status", required=false) String status,
    @RequestParam(value = "title", required=false) String title) {

另一种选择是使用JDK8并启用-parameters javac选项。