【Java】Ajax向后台传Json,struts后台接收不到参数
个人能力有限,本文如有不对的地方欢迎大家评论指正。
最近接到公司的一个老项目,需要业务扩展,在接口接收前台的Ajax请求时,遇到一些麻烦,咱们在springMvc中接收前台JSON传参时会在方法的入参前面加上@RequestBody注解,而在struts中这么写会报找不到方法的错误,后来查阅资料发现struts不支持这样的传参,那咱们只能另求他法。
传递的json数据格式如下:
1 { 2 "sampleNum": "133", 3 "infoList": [{ 4 "name": "John", 5 "idCard": "165495463145871541" 6 },{ 7 "name": "George", 8 "idCard": "156485647821456745" 9 },{ 10 "name": "charles", 11 "idCard": "165427913579541685" 12 }] 13 }
前端Ajax:
1 $.ajax({ 2 url: __ctxPath + '/gy/subInfoListEpidemicAction.do', 3 type: 'POST', 4 contentType: 'application/json;charset=utf-8', 5 data: parms, 6 dataType: 'JSON', 7 success: function (data) { 8 if (data.msg === true) { 9 $('#tResult').html("录入成功") 10 } else { 11 $('#tResult').html("【"+data.result + "】," + data.msg) 12 } 13 } 14 })
后端Action:
1 private String sampleNum; 2 private List
我们一般平时写到这里就已经完事儿了,可是这个却不行,下面是重点:
我们需要在struts.xml的配置文件中你对的Action加入一个拦截器,下面我会把需要加的地方使用下划线标记出来:
1 <package name="epidemic" extends="struts-default,json-default" namespace="/epicemic"> 23 4 5 6 7 8 9 <action name="*EpidemicAction" class="EpidemicAction" method="{1}"> 10 <result>${successResultValue}result> 11 action> 12 package> 13
最后补充一下拦截器所需jar包,可跟据自己的项目struts2版本自由更换
<dependency> <groupId>org.apache.strutsgroupId> <artifactId>struts2-json-pluginartifactId> <version>2.3.32version> dependency>
不是maven的小伙伴可以直接下载,将此链接放到迅雷下载可能会快些哦
https://repo1.maven.org/maven2/org/apache/struts/struts2-json-plugin/2.3.32/struts2-json-plugin-2.3.32.jar