2014-05-13 63 views
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方法: 当我改变该方法为GET ..它会在方法获得..我想知道我错过了什么

,并顺便说一句,有一个与控制器豆没有问题,怎么把它被扫描的100%

+1

你确定你的JSP正在序列化和提交吗?你真的能看到正在生成的HTTP GET/POST吗? – JamesENL

+0

是。我在Chrome中使用了开发人员工具,并检查URL是否正确,并且该方法是发布的。顺便说一句,我用JavaScript提交表单。 $ form.submit() – user3201503

+0

你怎么知道你正在进入'showBulkUpload'方法? – JamesENL

回答

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;"> 

那么它应该工作。

+0

谢谢!顺便说一下,我怎样才能通过JavaScript获得csrfToken?当用户点击“批量上传”按钮时,我会在js文件中生成此表单 – user3201503

0

的Http GETPOST方法具有不同的特征。至于你的情况,我只是猜测你给的名字,这是bulkUpload,你试图上传大量的数据。 Http GET当您将其与POST方法比较时,容量是有限的。因此,如果您尝试上传大量数据,则可能无法通过GET方法发送,直至您的浏览器和服务器。

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

HTTP协议不会在URI的长度上放置任何先验限制。服务器必须能够处理它们所服务的任何资源的URI,并且应该能够处理无限长的URI,前提是它们提供了基于GET的表单,这些表单可以生成这样的URI。一个服务器
如果一个URI比服务器可以处理更长的
(见10.4.15节),应该返回414(请求URI过长)状态。

Reference

10.4.15 414请求URI太长

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

Reference

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

这是极有可能在您的测试使用IE,如果你无法访问您的春季控制器。如果您使用的是ChromeFirefox,那么您的Web服务器可能无法处理GET使用该长数据的方法。

其他信息可以在here找到。