問(wèn)題引出:Caused by:Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
今天碰到了這個(gè)錯(cuò)誤氢拥,仔細(xì)的查了一下并總結(jié)了一下相關(guān)知識(shí)點(diǎn)洁段。做一個(gè)總結(jié)糊饱。
原因:在Controller中使用了@RequestBody來(lái)接收參數(shù)對(duì)象,并且前端使用的是form提交穗慕。
正解:SpringMVC 接收對(duì)象或者數(shù)組的兩種方式組合
1.前端直接使用form的submit提交(可以jquery.ajaxsubmit)。此時(shí)后端應(yīng)該去掉@RequestBody注解直接直接使用對(duì)象接收參數(shù)姐仅。傳數(shù)組的時(shí)候前端使用 name=foo[0].bar,? Controller參數(shù)Object o仗颈,o內(nèi)部包含屬性private List<Foo> foo, foo有個(gè)屬性bar 可以成功接收。也可以直接裸的List<Foo> foo來(lái)接诸尽。
2.前端使用json對(duì)象提交原杂。此時(shí)后端用一個(gè)對(duì)象去接,需要使用@RequestBody注解您机,保證該對(duì)象的JSON.toJsonString之后的結(jié)構(gòu)和你前端提交過(guò)來(lái)的json對(duì)象結(jié)構(gòu)一致即可轉(zhuǎn)換成功穿肄。
兩種方式用混了就會(huì)報(bào)上面的錯(cuò)誤。但是報(bào)上面錯(cuò)誤的原因并不只有這一種际看,網(wǎng)上說(shuō)的包沖突坑人不淺(如果你沒(méi)有用包管理工具咸产,那就當(dāng)我沒(méi)說(shuō)~)