我正在向我的控制器发送带有某些参数的URL,这通常很好。我使用javascript函数encodeURI()来编码参数。
但是,由于有换行符,我收到404错误。
这是一个有效的网址:
http://localhost:8080/Weasy/virtualtable/execQuery/46/select%20*%20from%20payment
这是一个非工作网址:
http://localhost:8080/Weasy/virtualtable/execQuery/46/select%20*%20%0Afrom%20payment
这是我的控制器方法:
@RequestMapping("execQuery/{schema_id}/{query}")
public ModelAndView execQuery(
@PathVariable("schema_id") Integer schemaId
, @PathVariable("query") String query) throws Exception {
SrcSchema schema = this.srcschemaService.getRowById(schemaId);
ModelAndView mav = new ModelAndView("virtualtable/form");
mav.addObject("schema", schema);
mav.addObject("query", query);
try {
int limit = 10;
List<Map<String, Object>> rows = jdbcService.executeQuery(schema.getConnection(), query, limit);
mav.addObject("rows", rows);
mav.addObject("message", "<span class='msg-info'>Result Set reduced to "+limit+" rows</span>");
} catch (Exception ex) {
logger.error("Error executing sql", ex);
mav.addObject("message", "<span class='msg-error'>"+ex.getMessage()+"</span>");
}
return mav;
}
为什么不起作用?
答案 0 :(得分:0)
我不认为这是你的应用程序。我想这是你的网络服务器阻止请求,因为你正在使用一个奇怪的字符。例如,Apache拒绝访问包含%2F(/),%5F(\)或%00(NULL)的URL。通常,%00和%1F之间的ASCII字符(命名控制字符)不应出现在URL上,%0A就是其中之一。
我的建议是,在执行请求之前,你应该解析你的查询并除去%0A以及任何有问题的字符。
如果你仍想让它工作,我认为你需要在.htaccess中包含一个重写(我猜你正在使用Apache),并使用正则表达式删除换行符并重定向到相同的URL而不用字符。