我想發送一個json的值從表單標籤到一個Spring MVC控制器。JSON到彈簧控制器
上提交法的形式執行以下代碼
var jsonStr = JSON.stringify($("#form1").serializeArray());
$.ajax({
url : "/DMS/webcontroller/startupload",
type : "POST",
// traditional : true,
contentType : "application/json; charset=utf-8",
processData:false,
//dataType : "json",
data : jsonStr,
success : function (response) {
alert('success ' + response);
},
error : function (response) {
alert('error ' + response);
},
});
我加入以下到我的春天配置XML
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonMessageConverter"/>
</list>
</property>
</bean>
<!-- Configure bean to convert JSON to POJO and vice versa -->
<bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="prefixJson" value="false"/>
<property name="supportedMediaTypes" value="application/json"/>
</bean>
我的控制器的簽名如下
@RequestMapping(value="/startupload", method=RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE, produces=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ReturnData startUpload(@RequestBody UploadStartVO startVO)
{...
當我用firefox 31在tomcat 7上運行這個時,我得到了415響應。如果我檢查th e請求使用工具我看到Content-Type已被添加到請求主體。另外, 請求數據的查詢格式如下:
supplierId=1111&unregSupplier=unregSupplier&customerName=customerName&externalEntity=externalentity&application=scms&logicalGroup=demand&user=u1&password=u1&appUser=appu1&documentType=email&documentDescription=documentDescription&contactPerson=contactPerson&contactNumber=contactNumber&documentGroupName=demand&documentPurpose=documentpurpose&uploaderIP=uploaderIp&uploaderName=scmsname&uploaderCompletePath=somepath%2Fsomepath&uploadDateTime=20%2F12%2F2014
,而不是像這樣:
[{"name":"supplierId","value":"1111"},{"name":"unregSupplier","value":"unregSupplier"},{"name":"customerName","value":"customerName"},{"name":"externalEntity","value":"externalentity"},{"name":"application","value":"scms"},{"name":"logicalGroup","value":"demand"},{"name":"user","value":"u1"},{"name":"password","value":"u1"},{"name":"appUser","value":"appu1"},{"name":"documentType","value":"email"},{"name":"documentDescription","value":"documentDescription"},{"name":"contactPerson","value":"contactPerson"},{"name":"contactNumber","value":"contactNumber"},{"name":"documentGroupName","value":"demand"},{"name":"documentPurpose","value":"documentpurpose"},{"name":"uploaderIP","value":"uploaderIp"},{"name":"uploaderName","value":"scmsname"},{"name":"uploaderCompletePath","value":"somepath/somepath"},{"name":"uploadDateTime","value":"20/12/2014"}]
請求體顯示:
Content-Type: application/x-www-form-urlencoded
Content-Length: 457
請求頭顯示
Host: localhost:8082
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://localhost:8082/DMS/
Cookie: JSESSIONID=C64F21EEECFC5BDF515C3DE22F51626A
Connection: keep-alive
如果我編輯這個請求,並在請求中放置json(這是調試期間在jsonStr var中看到的內容)Body更改Body中的Content-Type並在頭中添加Content-Type我得到一個400 Bad Request !
請幫我這個!
編輯:: 所以主要的問題是$ .ajax()沒有創建正確的請求。數據不是json,contenttype不是application/json。
EDIT :: 忘了粘貼的pom.xml扶養
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.databind-version}</version>
</dependency>
EDIT ::: 我試圖所述代碼與去除轉換對象UploadStartVO和ReturnData和與字符串對象替換。調用成功後,ajax()方法仍然返回異常,但表單標記具有適合我的控制器方法的action屬性。任何人都可以指出爲什麼Ajax調用不起作用?使用以下
剛剛嘗試以下一些點,如果仍不能工作的Firefox 31
請試試我的答案,如果它可以幫助您 – 2014-09-05 06:59:15
您正在使用哪個版本的彈簧? – 2014-09-08 05:08:53
4.0.2.RELEASE.jackson 2.3.3 – kavita 2014-09-08 05:10:23