1. 问题描述:
今天在SpringMVC应用中上传参数的时候遇到如下问题:
The request sent by the client was syntactically incorrect
这说明在提交的参数中,有的参数不符合服务器端数据要求。在排除其它参数没问题的情况下,确定是其中的时间参数除了问题。
客户端传送的时间参数如下所示:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfwAAAAzCAIAAAD9+S2RAAAC0klEQVR4nO3cO7qiMACA0bv8WYEbYAMugUXYXijS5lPLKadwrrxCRL+LD3JOJwZJ9YMB/ToejzHGEELTNN8AbEXbtiGEGOOx5yvGKPcAW9U0Tb/7XyGEV08JgBWFELroXy/zz+fzXwC24nQ6XfLetm0X/eup4NXTA+CXXQsv+gDbJ/oABRF9gIKIPkBBRB+gIKIPUBDRByiI6AMURPQBCiL6AAURfYCCiD5AQUQfoCCiD1CQVaN/2O/+XFX17Fu7/SGxd11N36irGzulRnbHHhx1bmqL5t8fMrc7wNtZL/qH/a5X5rrqd7OuZt/q7z0Ke/8sMPz05LEHpU8PzX1Kbv69GWXOGQBvZ7XoH/a7YU57oa+rYSlH1/TdBfZ4a+515tgzl+PZE0du/tfX+S8KAG/neWv6XUUnPe1vuBS/qseRzTR+YnxSmW742bj0E8cTqKvLKWnwlQLg7T0v+l14JwlOpnPU5P87ddfX872enh8Sfb8718kTh+gDn+VZ0e/X8ZHo/yz5XEfdsbqTin56jX7Z/G9vBnhTz4n+sI0PR3/a7WRvF0T/gaWd5LFEH/gsz4h+6hboQ9EfDpkN9+3o39f8zGjRBz7L6tFPrKNkb+QOdpyu6ScGTB/5v3UjN5Hq2d8N5NeBRB/4LKtG/+cZl9T20SObtx+uGQ/K9PbW052zC0ML579oEgBvaL3o5364NLh8nrmWniyqDNOdXaEZ3AGY3A5Y9vTnoh9eiT7wWdaK/q0/PBj8S0KywMmq93bLp3Z4/IU3A+6Yf3+Y6AMf43nP6QPwcqIPUBDRByiI6AMURPQBCiL6AAURfYCCiD5AQUQfoCCiD1AQ0QcoiOgDFET0AQoi+gAFEX2AgiSi3zTNZdP5fH719AD4NafT6ZL3tm276IcQvgHYrhBCF/0Y4/ViH4CNaZomxthF/3g8xhhDCNIPsCVt24YQ+sX/H30ACvEP4gtpC5w1FRAAAAAASUVORK5CYII=" alt="" />
而接受此参数的字段是一个Date类型的数据:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAR4AAAAeCAIAAAB13OY1AAAEq0lEQVR4nO2bO3LbMBCGcS7cQzfI4ATulSPQhascwYWrsJZaNqnkho0bT2bk2jVTAASx2B8g+Iws7z9sDIILyNxP+yClupT+/v75I9SvP8mpom+tttK6aslQbZRS8eA3k/rfGxCJ7lOClki0iQQtkWgTCVoi0SYStESiTSRoiZDaN61OSjXfu8m3SHuh1b48qcNRHZ6q951WFEWqL0qddPVZMretGqVO5fO33g+5znwN5ndC66N6OKrDUR2O+uVj26WaZ3U4qofzhv/6ttKKydTLzM2/vlCTXHmNqGX5TH4uQWsd7RW1eob3R0vNfkh6i2itIUHrrrQjWsRnajM/eAlak/S10XIOql8+uvezPrhcLvZXm3odnushKLGUz80ZDtOQlerHozcyMh7uxB6Pr2w+Ohhm4W75lsaFWXCxjEauOMCFF3kcgZhDUkNzOPSu7JI9e1yopc9K+1Mnpd+QA39Wuj9VX/zkAZJgkB3BcnA/cEWyYXvEaPni0B3mGpy8GpzcXg1c0f2rl37XZdFCR+DrPVoV9VTirGNo+Qm0Bns1ETzMToRNMVqJjxZQOq5UmLGsDGxhdvx1xWjhBHTqrbeurJucu09BqzIxOY6uSWjx/dBFY2YQWjXbSUSXNRJFyFRQXZKAhBpHq2eJMxC6u3NNhoRXP5mFCJTCuclBYdY8R8GnZykq3kYSQh+v/DbmFIEptOw4QYvGsJi9vDlympyPFyrS4PHevx1IKCsLQhM8FbmvNY6oyCeElBMWXlA3hSeEtYk+QsIO2Z79FBewu32iVpin9YM8kgwgpT07iRZwbodNvl7CBvNoQfLd4ITWZZKF0Re+4YQ8Wm2lgU08mpV1ZZIp9T4XDXZdAVpRfgXmF6GVvcSGo8hCSa0F8eOwbVp55tGCqZQfTNMClJscObf7k83swchlmFm0eLU2LycsjVodTvqmoTWpIssJtw0S9cY4Wuj7nmpGG4NegheCaKGckM6hy7VVs3Uv5CbQomEq6I54taycu0W0LAWjtZSgldzPLLRs+jeGFrF2NThWr6lytLxfsoRwOVq98afq3WGGuxqgHpuTEC59bI1ZcAz0w7BhOCMhXO1XhRCtZAf8FtCCASquo1yfg24VRrbBeH3ZoX1fitbQ2ODdvxXQGtr9Z8ObCpzqIP4kuvm4LeEbifSqV8O6/zlxFnwPTwe3PC6G+0kYrSQ+EbKzxV0598rFamgljBShFVsYuvAMLdYPTHbbzbU26V11w33avENIDvjMKo1WponPQkfYb4xjTs5OqpufsIYLNv5gLafk2xgFLXPEEJiJn0eP2Mkr0RMnzp3sm/MG/Tha6HkUeq5F/hNRoOPJXmNMg7qI/ABfGb4ky2Az3I1lucIEtJjzrYtW4PTIIDX1cG6T3Q5GF0sO44dgU1/dACjgu0CZMLUdQXNzj5aBqXl3ntX6zPnWRavjfj8VrY7Qpd9a2IGg286lfG4/+c37m7Eobk1oY4hEX15lb1eNpOhlErRE30YuuI3F21RNPFGClujeRZPSXJIXpuWLm7KClujeNaBVGq9W+RXCvf2oRCS6EQlaItEmErREok0kaIlEm0jQEok20T+qFX61kOtklQAAAABJRU5ErkJggg==" alt="" />
在Controller中使用自动装箱:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyMAAAA7CAIAAADn3ML5AAAQVUlEQVR4nO2dO3LcOBCGeR4dgeewbzDFE2yiSDoCHTia8gk2cCSmklMniuxkgnWypSo73pgb8IVHd6NBAnzp/0qBPQMCDRIEfnY3MUULAAAAAADyUGxtAAAAAADAaYHSAgAAAADIBZQWAAAAAEAuoLQAAAAAAHIBpQUAAAAAkAsoLQAAAACAXEBpAQAAAADkAkoLAAAAACAXUFoAAAAAALmA0gIAAAAAyAWUFgAAAABALqC0zsjb0+Plcrk8Pr2t1+atLsv6tl57YFtu7YeivSvaL7jmAICTkmpd0ymt1+tlYtX1G8ygF1orXqpbXRZFURRVk7X6jjMJuqa9M/TKfdHeFe2HOnDQfdHele0/+a0T+KfuLQ9auwtmnee901T57oacdYN9gPETpl96lvckrLRer/aS/Xq9XC7X1+G/46puMH17cLrOcd3p9af19XA6tj0FK/u0utGYSWVNDZxRaQ2eoee2bdv2S9neFe29fCIbRZkVSOHT6uTaGn2ZcZ53QODGOutKad/uRc5nuPWRr2lT+b2d/xh7wPHzX12+FIXz94PqgVOSKnP7VfL13OrvXkPj33fT8u6iLByBAaXlyCrj0+FDSmmdxvGlUlrm9+PZOI3YDJNkHCq51eV7V1pfyu0dWqmA0pI54EqZAkppneYJS6W0zO/Hs/EulNbvilE/Vi+aHwp5RNVT/rrJBWjdlmCNE5XW29MjLZkMqeWJkX14ddIQVlrXq6E6uxN2vT6eRWkqyO7P8ls7x4zb0SmAQTmFFcBOHFqJWFtp6c/zPjjgSpkCr9uZkxNWJay0qqoyCtzqsiirata8d7zx00mo6rdd1Yv14SCzyvo/rszgr7IFU/PDqXmgk3ek52xhfyYkpWW6rtivCDHSfeRpDdv7RVdMeMjcwKVTLy2GNG1ZyWd2tfZXTGj07enxcrm+Oqrz8en1yVNabrccg0bPoVXOLqQp47TDiuRgPcJJcCoVBiD3HEAc4j7EsnMDr7QoQ+iJxm5s88nbTLp6rgLxuK7As/f55OgaEpLoPKTBtdP90VLDqMH8G63qZEr/J3jX7HosY5gm7gqqdyGblX2POs9zaaqiKOvbMMTK+ja5KdxhK4zD4RAKo+A45s2q+LtDLkJ5kvaitIaPPHs097Lcr7TzhnCeVdf0VpdFUTXNJLVudVmUdUPMe2ccP51CMiVU2w5BwN4d1Tu9vPP/uzJcVp3w0s7tXf20CDNMW+ZS4JVWLySmf5trbazSomOM9voejkPqlJamLVJFTEVilNZ0Lt6eHi/X1+5z12rRnq5fj2LCm6aMWmkR9diF+RNglxOVPjk7+h/S04Iway5QWnRcIvL24eexzCvTrf3A5HF3auNL5aoWs/CYw279VVY9z14N85QWWc8kktRKS2Ozpu9r0VRFUZbGGKsqY7BM4ywwDqNWyjKwwNGVyY86s8ZzsvtCp7Q093K4X+nmDbL7U5EYpdWOUutWl0XVePPeKcdP2yuk794jySS/emcVoYq6tK3eL+W6wQKt/iDkncdCqcUrLUtAuEv7FFf0lE6/SJsrcl+DrwmMQlQSN5mMH1Bamraoil6vhGNHjB6OUrQ/U73Q6v5vW03JGFKL2TLOLKQp49jGKy27Hs8e/xx6RToCg4+dHt0HMOrWJu/SZUqrnw/8KXSjFSUSwRMzqZ9RhTS2ErITlcyjpgr9Mk4lfqPMV/7bkc8V4Y4KRA81Nmv6vh5mms04TMb/DMNDPQ410R974Ln3DhV36w/zCvkumL0oLc9i3TnU9CvZvEFU1FTEtROv6aC0BqnVC63RWRphT7Ct3Y0fRy0N9bwYccCugCvF2rZ1fFpGLjxZ2KJTb2EJtSyAyCqtUS50i2y36lofmkpLcrQwy779qdmKZUOk0tK0RcoxElFpTW8LvF4vl+vTILSY1whC/aIjgY4ckss4XwhKiwpuOi4952iyU8Gx5xbQPRfw1S5SWvTBx0n9uvfcOSO+/mhtJdRpGlelOU6yhnAFcfHKVlRaykQoWWmpbFb0fUXMiLm1HprDUz8OVSsl5V0YDhGDbsPHZJh/+zwtF9/HFTiHqn4lmzcI+SN0jinWVMN3TVUUVT0ILeOLE48f91XBFy8/3ZZT/rGWE8t6OZG/LoS8Y8xb5NQSldaYztOvulNA0Y0eciJrrIqDy6ufDoxTWqq4n2s2m76uVFrOfg++KKGsCvTL/VRTxjFciB7G+gUZn1b4drJLcKqGehpOr7SUPvV9QsuOgU5tPPOHC2HBSb2l82k5yVWc2bLSUtms6PuKsAuiOTz143BGRrN9CHeDmrbRjexKaTHJnvI51PUr4bxhmc2eOqXScvZ7MAfWaccP9Uahra9/lUyYj07w6i2hqprg1Ztfk3Q2A3BKawwPmrJh9GQZLyXaqzS1xdQulRZVPDJ6aAYJLXFlKy3Ooh0rrWAe24DidvLuSbc4N2/sV2ltEj2UdytNo7SC+VV+oyG/0b1YD5TWmVbKTNFDaoupXSotqnhk9NAMElrr+ntQWuEoHptQFXp5sNNwWmcYa18OnxahtCa/hiklFHlSnBwwYQNWAUXiNqdpi+kuoSUkpaUTM2QulUZBuuFCTZlY49hu+kKLPqWasTfdlGMSglcDlai1XGm5/vxUj+kbKK3Q5g5KpRV82+7e0zTCIREROirjqtUpraDNx1RaqqGyeKUUoz/ScirkSrJky9MiAnOac6jqV755gwknStdUN72dd/y8BNKqqD0ghgPFlHbr7UX7G94Z5tu3ZIrXKS3BwcH5Q7wEdDl1yVUkU3RPSK8isrs1bU256277zGYRpMzgxYwXcCX3GxOVlt+wpozGuNm5biSqwdc/qFFCi5iOBh98pNIip0fnMY98Oj4CQU0TVhvD635CGTlAGWHVrf3gNURa2L9ayHVNYTNX83yI7OvIg0NKSz8OyecQpzVFjhF9g7ll3ITrnE8OMr5A8BduxTlU9SvVvDHmrkvdoKzyvgt/c+jxw95fik2tiC0ehp1Ojf0dPNnUl+Fji+Gs+Za7nGqCeVqTnnl8eiNUAiVRfFcLo9cIOWZ+6+0BSm239aiKfFGKzYMLH5KFdEqLbSu8D4Rqiy/dNmDebhGyT0sR8BwgsyGpQt3me5wzncB97qRgsyT6Kkp6xpba2iFUorqDRm1wwbhJWnGbL5hKiN+gYWrdTtIiQ35CSbMXYZtTK61pGM2ZU3VKSz8OiUHtvpIXSoJmmrJ655eZu1dmEqg1zZ9oFOdQ069E8wY3j6lmPMuFpNFghx0/hkGuLlVF8Zif0Bn1GfljPi9s6FCfDr9UaCnePQxAOoPIYByxfpPhwkkcUGLGLOMlkunbUiTyMyWtbCxeabHCZdgXQlZanjkzy3gll+xJRjWqGoCyn8C+T6vGTlfwCnC3u12urG9MCiNR266VlvD234hWbVA6yVQt9P5VpgDSKK2WkFDBrRzoehQ2p44eDuNjzqDQKi2zncA4dBfL2JWSaIq6W40iU6h/R0qLDsaFz6FZomrofiWaNxSJ/EzJUFoUeUoOOn64tUC3qVXriS3PGF9sCS4rdTr84tQTxX5a2zEz6epwzE1ky2mOf+2Zrf91bi0wE3630uR0ko7ehD3Ljuo75bBBZhBmy3cqwVFJsMYJv8aj9WrlA0orrkxCa9icNUp8z0l/BCqy/W4MwT3pfGKS2U/L8HAOoXVKoLRALEl8CeIvTPurO7mTejagtOLKpDSHhjOASJwER0PYVWGLX7ZZHTfQBE4IlBaIIfBSgR5RabXB30bOC5RWXJnUJgXSwmxudYkJ7PBQSVHPWxu1EoveOgTHAEoLRJFqXQspLQAAAAAAMBcoLQAAAACAXEBpAQAAAADkAkoLAAAAACAXUFoAAAAAALmA0toTyV4pPSBH7jveu8xH8nM7buaASwYAWIc1lNaf+q+H4uND8dc3aWb791v58aEw/qrvbNnb18/Fx4fi4+f63/Tmbsf4wwnvcA04bt+xl1hOEgtw74dXAAAgO4dUWkOFHx/Kr38yGDyh+MGnpb886df1PpeAFH1PeS0WNckZgt185pDs957I384DAIDM7EdpjXz/exc+LebH2ZmfS8fkvQdWvxacBoDSSksirbXlzyYDAN4vx1Ra+aE9LFTOCJTWflj5WvDNQWmlJsmZg9ICAGyBpLR6hVR+/WOF9izBRKkoVyqZZX5WdD0GgtIavlJEGI2G9CJvIvwQ7QQW2SijMbsbh9jTve0/I5eCpurrtcpSBtKGRa0vGpsJw+nTFbBH0XeqHqug9lpobFb3XVr8Y5SW0K/0NotQ1tE92cDmFCoaSgsAsAUKpUX9/d04ZVRK63PJ1mOwWGkNsUX779NP9Ulp23H252f2SKVVe8WNGV+rtMrSi2jahXmj5igt0WYmvGqfMIU9KqVF1jM1pVZaCptVfZ+uCG2vVmkF+pXcZhmd0trK5gRSC0oLALAFWqU1SKJB6wyp6DFKS6rHQBM9FMpM7jdDxv37rYxUWtaKIk3voQXAWHTGQl3VnI+IV1qBWvyEX7YhGYXNRHJx99Fse4RlkJAATRWRHsXa49usvl5iW0qlpehXUpsDqJTWdjYvDiAmy6wHAIAYVErL9DwNH/bCJUppCfUYLFNazaeHhMnyCoeLTmlR69cMpSUv9mxsKnZxCdtMG+p8GmePoLS074zJ10Jls/p6ieu+UmmF+5XW5gAqpbWdzbOdWsZdDIcWAGB9NEpLSsyKzdOSKycPp2DLRGbfa5nm6uiM+Kj1IaC0AqtgYp/W4iy1ZD4tR/Ky/ZHt1sUYtdcrhdIK9yutzTO6RFS9mc2znhocg+HRAgCsDpSWHvZ9RHECX1Fp6XJotGakeB8gxh6ND8aqLzZ6uEelFerXHpXWVjYv7aXWMwoAAGmJVVpjFhQfPRwT0iWl5dZjsKfooVs5keixJ6Xlr3HzoiVKpRWsPMqemGgXs2gqlFawAe31mtNWMFHI61damwMQjSnUyWo2L9/oAZtsAAC2IE5pTbnto8RxlI353h+vtIh6JhZmxE/vJy7IiL/VJbs9ACl35ka0qMJzlVa6N6sUNgffzYy2hy9OXA3awsC1UNgccb0UTi3S12O7dUL9SmuzjKuZiLcwNrQZ7x4CAA7KrF0erBcGvZ0XWKUl1jMoNv9v9E4Ju04oqopWWjT+PE2U9d+60qgWH/mVLzojXmWzqvuBRY1pLbSHgWOPpu/c1eDCh3yhsM0RC7rsoWKa8odGqF9JbZYhDOo2FvFyAde3OUUfobQAAFsQrbSIHbCs/as+/Rx3DR0dTtQGV249CZVW23r6b07alr9ahLYPEJbTVZSWpBCjlqg4vw6/mirs0fSdqmjWtdDYHLGiB4uGfzZT2a90NocwWyrrG5WGvonN2CMeAHBYojPiwW5hfCzk6/Tv0Z4MYIemdUh0nqG0AABbAKV1GpjsmM3euNqbPXmYuY8GiCCZnj3Z2AMAHAQorfMgvF2/iRLYmz2ZoJLfQSpCL5xE4gVHAQAgO1Ba54JQN5sqgL3Zk4dbXWLZzkTyczsOSVwyAMA6SEoLAAAAAAAsAUoLAAAAACAXUFoAAAAAALmA0gIAAAAAyMX/3jA/W2AQRgYAAAAASUVORK5CYII=" alt="" />
原因所在: 在装箱过程中时间的参数的转化出错。
2. 问题解决
2.1 方法一:
在需要转变时间的Controller中添加如下代码:
@InitBinder
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
// DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
CustomDateEditor dateEditor = new CustomDateEditor(format, true);
binder.registerCustomEditor(Date.class, dateEditor);
super.initBinder(request, binder);
}
2.2 方法二:
在实体类中对应的时间字段上加上如下注释:
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birthday;
用这种方法的时候注意要引入joda-time.jar包,在Maven工程的pom.xml文件中加入如下依赖:
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.</version>
</dependency>