cari

Rumah  >  Soal Jawab  >  teks badan

javascript - spring4.3.7 Bagaimana untuk mendapatkan parameter jenis kompleks seperti senarai yang diluluskan oleh ajax

Bagaimana spring 4.3.7 menerima jenis kompleks seperti senarai yang diluluskan oleh ajax
Saya akan dilaporkan jika saya lulus terus

. ; nilai yang dikembalikan ialah
[cn.xxx.entity.UAnswer@2d3e47ed]



Saya mencari penyelesaian dalam talian dan mendapati bahawa ia pada dasarnya adalah dari masa lalu, kebanyakannya 3.x:

1. Tambah pakej balang jackson:

 jackson-core 

 jackson-mapper

 jackson-databind
2.Konfigurasikan xml

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list >
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
            </list>
        </property>
    </bean>

Salah satunya ialah AnnotationMethodHandlerAdapter sudah usang, dan yang satu lagi masih melaporkan ralat, dan saya diberitahu

org.springframework.web.util.NestedServletException: Permintaan

pemprosesan gagal; pengecualian bersarang ialah

org.springframework.beans.InvalidPropertyException: Sifat tidak sah

'uAnswers0' kelas kacang [cn.xxx. dirujuk dalam laluan harta terindeks 'uAnswers0' ialah
bukan tatasusunan mahupun Senarai atau Peta yang dikembalikan ialah

[cn.xxx.entity.UAnswer@70671304]


Kod terperinci adalah seperti berikut:
1 UAswer class

public class UAnswer {
    private Integer uaid;
    private Integer quid;//用户id
    private Integer qnid;//问卷id
    private Integer qid;//问题id
    private Integer oid;//选项id
    private String remark;//备注
    private String createtime;

    public Integer getUaid() {
        return uaid;
    }

    public void setUaid(Integer uaid) {
        this.uaid = uaid;
    }

    public Integer getQuid() {
        return quid;
    }

    public void setQuid(Integer quid) {
        this.quid = quid;
    }

    public Integer getQnid() {
        return qnid;
    }

    public void setQnid(Integer qnid) {
        this.qnid = qnid;
    }

    public Integer getQid() {
        return qid;
    }

    public void setQid(Integer qid) {
        this.qid = qid;
    }

    public Integer getOid() {
        return oid;
    }

    public void setOid(Integer oid) {
        this.oid = oid;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public String getCreatetime() {
        return createtime;
    }

    public void setCreatetime(String createtime) {
        this.createtime = createtime;
    }
}

2. Kelas UAAnswerList

public class UAnswerList {
    private Integer quid;//用户id
    private Integer qnid;//问卷id
    private List<UAnswer> uAnswers;

    public Integer getQuid() {
        return quid;
    }

    public void setQuid(Integer quid) {
        this.quid = quid;
    }

    public Integer getQnid() {
        return qnid;
    }

    public void setQnid(Integer qnid) {
        this.qnid = qnid;
    }

    public List<UAnswer> getuAnswers() {
        return uAnswers;
    }

    public void setuAnswers(List<UAnswer> uAnswers) {
        this.uAnswers = uAnswers;
    }
}
3.pengawal

    @ResponseBody
    @RequestMapping("addAnswer.do")
    public String addAnswer(HttpServletRequest request, HttpServletResponse response, UAnswerList uAnswers){
        ReturnResult r = new ReturnResult();
        r.setCode(1);
        r.setMsg("findAllNowCity success");
        if(uAnswers==null||uAnswers.getQnid()==null||uAnswers.getQuid()==null||uAnswers.getuAnswers()==null){
            r.setCode(-1);
            r.setMsg("尚未填写问卷");
            return r.toJsonString();
        }
         //相关操作
        return r.toJsonString();
    }

4. Data simulasi Ajax

function yaya(){
              $.ajax({
                    url: "http://192.168.0.251:8080/jsapi/addAnswer.do",
        
                    data:  {
                        quid:"odeq5uFtR835lZGTKxLpGy9jHEDU",
                        qnid:1,
                        uAnswers:[
                            {
                                qid:1,
                                oid:2
                            },
                            {
                                qid:1,
                                oid:3
                            },
                            {
                                qid:2,
                                oid:7
                            },
                            {
                                qid:3,
                                oid:14
                            },
                            {
                                qid:6,
                                oid:15,
                                remark:"hahaha"
                            },
                        ]
                        
                    },
                    type: "post",
        
                    cache : false,
        
                    dataType:'json',
        
                    success: function(data) {
                        console.log(data);
                        document.getElementById("resurl").innerHTML=  JSON.stringify(data);
        
                    },
            });
      }

Ia juga mungkin menjadi masalah dengan format penyambungan data ajax, tetapi saya tidak tahu bagaimana untuk menyelesaikannya buat masa ini. .

曾经蜡笔没有小新曾经蜡笔没有小新2834 hari yang lalu606

membalas semua(3)saya akan balas

  • 黄舟

    黄舟2017-05-16 13:27:28

    Gunakan @RequestBody UAnswerList uAnswers

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 13:27:28

        @ResponseBody
        @RequestMapping("addAnswer.do")
        public String addAnswer(HttpServletRequest request, HttpServletResponse response, @RequestBody UAnswerList uAnswers){
            ReturnResult r = new ReturnResult();
            r.setCode(1);
            r.setMsg("findAllNowCity success");
            if(uAnswers==null||uAnswers.getQnid()==null||uAnswers.getQuid()==null||uAnswers.getuAnswers()==null){
                r.setCode(-1);
                r.setMsg("尚未填写问卷");
                return r.toJsonString();
            }
             //相关操作
            return r.toJsonString();
        }

    balas
    0
  • 漂亮男人

    漂亮男人2017-05-16 13:27:28

    2 tempat perlu diubah suai:

    1. Gunakan anotasi @RequestBody untuk menunjukkan penggunaan kandungan kandungan http, seperti berikut:

    @ResponseBody
    @RequestMapping("addAnswer.do")
    public String addAnswer(HttpServletRequest request, HttpServletResponse response, @RequestBody UAnswerList uAnswers){ 省略 }
    
    1. Pihak js perlu menggunakan json untuk menghantar data, jadi anda perlu menentukan jenis aplikasi/json dan gunakan JSON.stringify untuk menukar objek ke dalam format json, seperti berikut:

    function yaya(){
                  $.ajax({
                        url: "http://192.168.0.251:8080/jsapi/addAnswer.do",
                        contentType:"application/json",  //新增
                        data:  JSON.stringify({
                            quid:"odeq5uFtR835lZGTKxLpGy9jHEDU",
                            qnid:1,
                            uAnswers:[
                                {
                                    qid:1,
                                    oid:2
                                },
                                {
                                    qid:1,
                                    oid:3
                                },
                                {
                                    qid:2,
                                    oid:7
                                },
                                {
                                    qid:3,
                                    oid:14
                                },
                                {
                                    qid:6,
                                    oid:15,
                                    remark:"hahaha"
                                },
                            ]
                            
                        }),
                        type: "post",
            
                        cache : false,
            
                        dataType:'json',
                       
                        success: function(data) {
                            console.log(data);
                            document.getElementById("resurl").innerHTML=  JSON.stringify(data);
            
                        },
                });
          }
    

    balas
    0
  • Batalbalas