recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Spring4.3.7 Comment obtenir des paramètres de type complexes tels que les listes transmises par Ajax

Comment le printemps 4.3.7 reçoit-il les types complexes tels que les listes transmises par ajax
Je serai signalé si je le transmets directement

?

org.springframework.beans.InvalidPropertyException : propriété non valide
'uAnswers0' de la classe du bean [cn.xxx.entity.UAnswerList] :
La propriété référencée dans le chemin de propriété indexé 'uAnswers0' n'est
ni un tableau, ni une liste, ni une carte ; la valeur renvoyée était
[cn.xxx.entity.UAnswer@2d3e47ed]

J'ai recherché des solutions en ligne et j'ai découvert qu'elles provenaient essentiellement du passé, principalement des solutions 3.x :

1. Ajouter le paquet de pots Jackson :

 jackson-core 

 jackson-mapper

 jackson-databind

2.Configurer 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>

L'un est qu'AnnotationMethodHandlerAdapter est obsolète, et l'autre signale toujours une erreur, et on m'a dit

org.springframework.web.util.NestedServletException : le traitement de la demande a échoué ; l'exception imbriquée est
org.springframework.beans.InvalidPropertyException : propriété non valide
'uAnswers0' de la classe du bean [cn.xxx.entity.UAnswerList] :
Property référencé dans le chemin de propriété indexé 'uAnswers0' n'est
ni un tableau, ni une liste, ni une carte ; la valeur renvoyée était
[cn.xxx.entity.UAnswer@70671304]

Le code détaillé est le suivant :

1Classe de réponse
.

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. Classe UAnswerList

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.contrôleur

    @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. Données simulées 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);
        
                    },
            });
      }

Cela peut aussi être un problème avec le format d'épissage des données ajax, mais je ne sais pas comment le résoudre pour le moment. .

曾经蜡笔没有小新曾经蜡笔没有小新2748 Il y a quelques jours571

répondre à tous(3)je répondrai

  • 黄舟

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

    Utilisez @RequestBody UAnswerList uAnswers

    répondre
    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();
        }

    répondre
    0
  • 漂亮男人

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

    2 places sont à modifier :

    1. Utilisez l'annotation @RequestBody pour indiquer l'utilisation du contenu du corps http, comme suit :

    @ResponseBody
    @RequestMapping("addAnswer.do")
    public String addAnswer(HttpServletRequest request, HttpServletResponse response, @RequestBody UAnswerList uAnswers){ 省略 }
    
    1. Le côté js doit utiliser json pour transmettre des données, vous devez donc spécifier le type application/json et utiliser JSON.stringify pour convertir l'objet au format json, comme suit :

    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);
            
                        },
                });
          }
    

    répondre
    0
  • Annulerrépondre