个人能力有限,本文如有不对的地方欢迎大家评论指正。
最近接到公司的一个老项目,需要业务扩展,在接口接收前台的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<Map<String, String>> infoList; 3 public String subInfoList() {String name = "";System.out.println("sampleNum="+samaleNum); 4 String idCard = ""; 5 for (Map<String, String> map : infoList) { 6 name = map.get("name"); 7 idCard = map.get("idCard"); 8 } 9 return SUCCESS; 10 } 11 public List<Map<String, String>> getInfoList() { 12 return infoList; 13 } 14 15 public void setInfoList(List<Map<String, String>> infoList) { 16 this.infoList = infoList; 17 } 18 public String getSampleNum() { 19 return sampleNum; 20 } 21 22 public void setSampleNum(String sampleNum) { 23 this.sampleNum = sampleNum; 24 }
我们一般平时写到这里就已经完事儿了,可是这个却不行,下面是重点:
我们需要在struts.xml的配置文件中你对的Action加入一个拦截器,下面我会把需要加的地方使用下划线标记出来:
1 <package name="epidemic" extends="struts-default,json-default" namespace="/epicemic"> 2 <interceptors> 3 <interceptor-stack name="myStack"> 4 <interceptor-ref name="json"></interceptor-ref> 5 <interceptor-ref name="defaultStack"/> 6 </interceptor-stack> 7</interceptors> 8<default-interceptor-ref name="myStack"/> 9 <action name="*EpidemicAction" class="EpidemicAction" method="{1}"> 10 <result>${successResultValue}</result> 11 </action> 12 </package> 13
最后补充一下拦截器所需jar包,可跟据自己的项目struts2版本自由更换
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-json-plugin</artifactId> <version>2.3.32</version> </dependency>
不是maven的小伙伴可以直接下载,将此链接放到迅雷下载可能会快些哦
https://repo1.maven.org/maven2/org/apache/struts/struts2-json-plugin/2.3.32/struts2-json-plugin-2.3.32.jar