zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    st-load视频性能测试
    gitlab-ci集成SonarQube代码质量检查
    退役记
    洛谷 P5195 【[USACO05DEC]Knights of Ni S】
    洛谷 P4742 【[Wind Festival]Running In The Sky】
    洛谷 SP13105 【MUTDNA
    洛谷 P3174 【[HAOI2009]毛毛虫】
    洛谷 P1542 【包裹快递】
    Python函数的返回值
    ubuntu18.04修改国内apt源
  • 原文地址:https://www.cnblogs.com/aioe/p/13962327.html
Copyright © 2011-2022 走看看