Javascript 获取编码的GET请求时出错

Javascript 获取编码的GET请求时出错,javascript,java,spring,url-encoding,datatables-1.10,Javascript,Java,Spring,Url Encoding,Datatables 1.10,我正在尝试执行GET调用以重新加载数据表 我正在对以下日期进行编码,并将其作为路径变量发送给2015/11/01 18:38和2015/11/09 18:38 2015/11/01 18:38 -> encoded -> 2015%2F11%2F01%2018%3A38 2015/11/09 18:38 -> encoded -> 2015%2F11%2F09%2018%3A38 我得到一个错误: http://localhost:8880/myapp/getAler

我正在尝试执行
GET
调用以重新加载数据表

我正在对以下日期进行编码,并将其作为路径变量发送给2015/11/01 18:382015/11/09 18:38

2015/11/01 18:38 -> encoded -> 2015%2F11%2F01%2018%3A38 
2015/11/09 18:38 -> encoded -> 2015%2F11%2F09%2018%3A38
我得到一个错误:

http://localhost:8880/myapp/getAlertFilterHistory/2015%2F11%2F01%2018%3A38/2015%2F11%2F09%2018%3A38/?_=1448024862539
400 Bad Request 76ms jquery.min.js (line 4)
"NetworkError: 400 Bad Request - http://localhost:8880/myapp/getAlertFilterHistory/2015%2F11%2F01%2018%3A38/2015%2F11%2F09%2018%3A38/?_=1448024862539"
但如果我使用以下URL,它就可以正常工作:

http://localhost:8880/myapp/getAlertFilterHistory/null/null/?_=1448024656575
另外,当我将编码的日期作为查询字符串传递时,它也可以工作

http://localhost:8880/myapp/validateFilterHistoryDates?filterStartDate=2015%252F11%252F01%252018%253A38&filterEndDate=2015%252F11%252F09%252018%253A38
因此,当我将它们作为查询字符串传递时,编码日期起作用,但当我将它们作为路径变量传递时,编码日期失败

我在Spring Controller中的Java代码是:

我的javascript调用:

javascript中的我的datatable代码

有人知道为什么会这样吗

编辑

我仍然不知道为什么会发生这种情况,我将代码改为接受查询字符串而不是uri路径,结果成功了

我在jsp中更改了:

//filterHistortTable.ajax.url('getAlertFilterHistory/'+filterStartDate+'/'+filterEndDate+'/').load();
filterHistortTable.ajax.url('getAlertFilterHistory?fromDateStr='+filterStartDate+'&toDateStr='+filterEndDate).load();
在我的控制器中:

@RequestMapping(value = "/getAlertFilterHistory", method = RequestMethod.GET)
    @ResponseBody
    public String getAlertFilterHistory(@RequestParam(value = "fromDateStr", required = false) String fromDateStr,
            @RequestParam(value = "toDateStr", required = false) String toDateStr, HttpSession session) {
    //(@PathVariable String fromDateStr, @PathVariable String toDateStr, HttpSession session) {

我不知道确切的问题是什么,因为通过解码这些值看起来很好。但是作为开发人员,我认为这不是在URL中发送日期时间值的专业方式。您必须以类似时间戳的简单方式发送它们,然后在业务逻辑层中将它们重新映射到实际的Datetime对象。

将过滤放入路径中是一种不好的做法。使用参数。Pat for Resource我可以使用post请求,它不需要编码。但是我想做一个Get,因为我只是获取数据来显示。您如何使用Ajax或一些脚本机制将请求发送到服务器??尝试将请求中的
内容类型设置为
application/x-www-form-urlencoded;charset=utf-8
。在Ajax请求中设置以下内容
setRequestHeader(“内容类型”、“应用程序/x-www-form-urlencoded;charset=utf-8”)你试过吗??
var filterConfigurationsDataTable = $('#filterConfigurationsTable').dataTable( {
                    "sAjaxSource" : 'getAlertFilterHistory/null/null/',                 
                    "sPaginationType": "bootstrap", 
                    "order": [[ 0, "desc" ]],
                    "bAutoWidth": false,
                    "bRetrieve": true,
                    "bProcessing": true,                                        
                    "aoColumns": [
                        { "data": "requestDate" },
                        { "data": "requestType" },
                        { "data": "applicationNames" },
                        { "data": "hosts" },
                        { "data": "matchStrings" },
                        { "data": "regEx" },
                        { "data": "activationTime" },
                        { "data": "expirationTime" },
                        { "data": "modifiedBy" },
                        { "data": "ticket" },
                        { "data": "api"},
                        { "data": "description"}

                    ] ,                 
                    "scrollX": true
                } );
//filterHistortTable.ajax.url('getAlertFilterHistory/'+filterStartDate+'/'+filterEndDate+'/').load();
filterHistortTable.ajax.url('getAlertFilterHistory?fromDateStr='+filterStartDate+'&toDateStr='+filterEndDate).load();
@RequestMapping(value = "/getAlertFilterHistory", method = RequestMethod.GET)
    @ResponseBody
    public String getAlertFilterHistory(@RequestParam(value = "fromDateStr", required = false) String fromDateStr,
            @RequestParam(value = "toDateStr", required = false) String toDateStr, HttpSession session) {
    //(@PathVariable String fromDateStr, @PathVariable String toDateStr, HttpSession session) {