【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<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
原文地址:https://www.cnblogs.com/aioe/p/13962327.html