0

我不太确定这是否与春天有关: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.. 它会进入方法.. 我想知道我错过了什么

顺便说一句,控制器 bean 没有问题,因为它被 100% 扫描

4

2 回答 2

0

Http GETPOST方法有不同的特点。至于您的情况,我只是猜测您给出的名称,即bulkUpload您正在尝试上传大量数据。当您将其与POST方法进行比较时, Http GET容量是有限的。因此,如果您尝试上传大量数据,那么您可能无法通过GET方法将其发送到您的浏览器和服务器。

GET方法容量可能会根据客户端浏览器以及您的 Web 服务器而变化。如果服务器无法处理,由于GET方法的长度,它应该提高414 Request-URI Too Long.


HTTP 协议对URI的长度没有任何先验限制。服务器必须能够处理它们所服务的任何资源的 URI ,并且如果它们 提供可以生成此类 URI 的基于 GET 的表单,
则应该能够处理无限长度的 URI。 如果 URI比服务器可以处理的长(参见第 10.4.15 节),
服务器
应该返回 414(Request-URI Too Long)状态。

参考

10.4.15 414 请求 URI 太长

服务器拒绝为请求提供服务,因为 Request-URI 比服务器愿意解释的要长。这种罕见的情况只有在客户端错误地将 POST 请求转换为具有长查询
信息的 GET 请求时才可能发生,此时客户端已下降到重定向的 URI“黑洞”(例如,重定向的 URI 前缀指向本身的后缀),或者当服务器受到客户端的攻击时,客户端试图利用某些服务器中存在的安全漏洞,使用固定长度的
缓冲区来读取或操作 Request-URI。

参考

对于客户端站点,浏览器 GET 方法容量如下:

如果您无法访问 Spring Controller,则很有可能在测试中使用IE 。如果您使用的是ChromeFirefox,您的 Web 服务器可能无法处理包含该长数据的GET方法。

可以在此处找到其他信息。

于 2014-05-13T08:48:59.370 回答
0

这与 Spring 有点相关,但更具体到 Broadleaf 中的 CsrfFilter。我猜你的 CsrfFilter 日志中有一个堆栈跟踪。这个过滤器(连接在 Broadleaf 的 applicationContext-security.xml 中)将确保所有 POST 请求都有一个 csrfToken 请求参数(CSRF 代表 Cross Site Request Forgery)。如果您替换您发布的代码段:

<form class="csvForm" method="post" action="/admin/myentity/bulkUpload" style="display: none;">

使用 blc:form Thymeleaf 处理器(它会自动将 csrfToken 隐藏输入参数填充到您的 HTML 中):

<blc:form class="csvForm" method="post" action="/admin/myentity/bulkUpload" style="display: none;">

然后它应该工作。

于 2014-05-13T18:58:38.093 回答