SpringMVC项目中通过下面的URL进行GET请求。当url地址中有多个小数点的时候。后台通过@PathVariable来获取会丢失部分数据。丢失最后一个小数点后的数据。
@PathVariable是用来对指定请求的URL路径里面的变量
eg: Java代码
@RequestMapping(value = "form/{id}/apply", method = {RequestMethod.PUT, RequestMethod.POST})
{id}在这个请求的URL里就是个变量,可以使用@PathVariable来获取
@PathVariable和@RequestParam的区别就在于:@RequestParam用来获得静态的URL请求入参
@RequestMapping(value = "/getQR/{content:.+}", method = RequestMethod.GET)
public void getQR(@PathVariable("content") String content,
HttpServletRequest req,
HttpServletResponse resp) {
QRCodeUtil.buildQRCode(content, req, resp);
}
通过传递src路径的方式绘制图片。
<script type="text/javascript">
function createQR() {
var content = $('#text-content').val();
var url = "getQR/" + content ;
alert(url);
document.getElementById("QRImage").src= url;
}
</script>
缺点:特殊字符用PathVariable来传递变量时,要注意小数点截断问题。传递参数为url时特殊字符会报bad request错误。如;,/等等。
后采用url?a=...&&b=...方式传递参数。
<script type="text/javascript">
function createQR() {
var content = $('#text-content').val();
var t = encodeURIComponent(content);
var url = "getQR?content=" + t ;
alert(url);
document.getElementById("QRImage").src= url;
}
</script>
使用var t = encodeURIComponent(content);的原因是url中中文参数乱码。
后台直接用getParameter即可。
@RequestMapping(value = "/getQR", method = RequestMethod.GET)
public void getQR(
HttpServletRequest req,
HttpServletResponse resp) {
String content = req.getParameter("content");
QRCodeUtil.buildQRCode(content, req, resp);
}