我不太确定这是否与春天有关:D
我有一张表格:
<form class="csvForm" method="post" action="/admin/myentity/bulkUpload" style="display: none;">
我有一个控制器:
@RequestMapping("/" + AdminMyController.SECTION_KEY)
@Secured("PERMISSION_OTHER_DEFAULT")
public class AdminMyController extends AdminBasicEntityController {
protected static final String SECTION_KEY = "myentity";
@RequestMapping(value = "/bulkUpload", method = RequestMethod.POST)
public String showBulkUpload(HttpServletRequest request, HttpServletResponse response, Model model) throws IOException {
Map<String, Object> responseMap = new HashMap<String, Object>();
return "sts";
}
}
我想知道为什么它不会进入showBulkUpload方法:o 当我把方法改成GET时......它会进入方法..我想知道我错过了什么
和btw,控制器bean没有问题,因为它被100%扫描
答案 0 :(得分:0)
Http GET 和 POST 方法具有不同的特征。至于你的情况,我只是猜测你给出的名字,bulkUpload
,你试图上传大量的数据。与 POST 方法进行比较时,Http GET 容量有限。因此,如果您尝试上传大量数据,则可能无法通过 GET 方法将其发送到您的浏览器和服务器。
GET 方法容量可能会根据客户端浏览器以及您的Web服务器而更改。如果服务器无法处理,由于 GET 方法的长度,它应该引发414 Request-URI Too Long
。
HTTP协议不对
的长度设置任何先验限制 一个URI。服务器必须能够处理他们的任何资源的URI 服务,并且应该能够处理无限长度的URI 提供可以生成此类URI的基于GET的表单。服务器
如果URI较长,则应该返回414(Request-URI Too Long)状态 服务器可以处理(见10.4.15节)。
10.4.15 414 Request-URI太长
服务器拒绝为请求提供服务,因为 Request-URI比服务器愿意解释的长。这个 只有当客户不正确时才会出现罕见情况 将POST请求转换为具有长查询的GET请求 信息,当客户端进入URI&#34;黑洞&#34;的 重定向(例如,指向后缀的重定向URI前缀 本身),或当服务器受到客户试图攻击时 利用固定长度来利用某些服务器中存在的安全漏洞 用于读取或操作Request-URI的缓冲区。
对于客户端站点,浏览器GET方法容量如下:
如果您无法访问Spring Controller,很可能在测试中使用 IE 。如果您使用 Chrome 或 Firefox ,则您的网络服务器可能无法使用该长数据处理 GET 方法。
其他信息可在here。
中找到答案 1 :(得分:0)
这与Spring有些相关,但更具体到Broadleaf中的CsrfFilter。我猜你的CsrfFilter日志中有一个堆栈跟踪。此过滤器(连接在Broadleaf中的applicationContext-security.xml中)将确保所有POST请求都具有csrfToken请求参数(CSRF代表跨站点请求伪造)。如果您更换了您发布的代码段:
<form class="csvForm" method="post" action="/admin/myentity/bulkUpload" style="display: none;">
使用blc:将Thymeleaf处理器(自动填充csrfToken隐藏输入参数)添加到HTML中:
<blc:form class="csvForm" method="post" action="/admin/myentity/bulkUpload" style="display: none;">
然后它应该工作。