標籤:
這種類型的提交, 必須配合 multipartResolver,
$("button:submit").click(function(){ $.ajax({ type : ‘POST‘, url : ‘${sys_config.root_path}/login.html‘, cache:false, processData:false, contentType:false, data : new FormData($(‘#login_form‘)[0]), dataType : "json" }).done(function(data) { if (data.success) { //... } }); return false; });
需要在Spring設定檔中使用, 沒有這個的話, request中的parametersMap是空的
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- one of the properties available; the maximum file size in bytes --> <property name="maxUploadSize" value="10240000"/> </bean>
在dependency中要添加commons-fileupload.
在Controller中, 使用正常的方式即可
@RequestMapping(value = {"/login"}, method = RequestMethod.POST, produces="application/json;charset=UTF-8") @ResponseBody public String doLoginPost() { Map<String, String[]> params = getRequest().getParameterMap(); .. }
另外在Spring的配置中還需要注意添加 content-negotiation-manager, 沒有這個的話, 使用produces="application/json"會出406錯誤. 其中關鍵的一個參數是favorPathExtension, 這個必須為false, 另外ignoreAcceptHeader這個參數不能加, 加上也會導致406.
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" /> <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> <!-- Turn off working out content type based on URL file extension, should fall back to looking at the Accept headers --> <!-- Disabled path extension. Note that favor does not mean use one approach in preference to another, it just enables or disables it. The order of checking is always path extension, parameter, Accept header --> <property name="favorPathExtension" value="false" /> <!-- Enable the use of the URL parameter --> <property name="favorParameter" value="true" /> <!-- Don‘t use the JAF, instead specify the media type mappings manually - we only wish to support JSON and XML --> <property name="useJaf" value="false"/> <property name="defaultContentType" value="text/html" /> <property name="mediaTypes" > <value> json=application/json xml=application/xml </value> </property> </bean>
對於普通的提交, 使用這種方式即可, 不需要multipartResolver
$("button:submit").click(function(){ $.ajax({ type : ‘POST‘, url : ‘${sys_config.root_path}/login.html‘, cache:false, data : $(‘#login_form‘).serialize(),//new FormData($(‘#login_form‘)[0]), dataType : "json" }).done(function(data) { //... }); return false; });
favorPathExtension
SpringMVC的Ajax提交