【问题标题】:Ajax post call to controller getting 400 (Bad Request)对控制器的 Ajax 发布调用得到 400(错误请求)
【发布时间】:2016-06-24 16:55:05
【问题描述】:

我正在尝试使用 jquery 实现 ajax 调用。当我提交调用时,它会抛出 400 Bad Request..不确定我在 ajax 调用中哪里做错了..需要帮助来解决这个问题..

 submitHandler:function(form){
            var emailSub = $("#emailSubTxtArea").val();
            var emailBody = $("#emailBodyTxtArea").val();
            if(confirm("You are about to send Email Communication, Are you sure..?")){
            $.ajax({
                type: "POST",
                url:  $("#applicationUrl").val() +"/web/utilities/sendEmailMessage",
                dataType: "json",
                //cache:false,
                contentType: "application/json; charset=utf-8",
                data:JSON.stringify({emailSubject : emailSub,emailMsg : emailBody}), 
                success:function(data)
                {
                    console.log("Sending Email Notification was success.");
                },
                error: function(x, t, m) {
                    console.trace();
                    if (!(console == 'undefined')) {
                    console.log("ERROR: " + x + t
                            + m);
                    }
                    }
           });
        }
return false;
        }

我的控制器代码:

@RequestMapping(value="/sendEmailMessage",method=RequestMethod.POST)
    public ModelAndView sendEmailCommunication(@RequestParam("emailSubject") String emailSubject,@RequestParam("emailMsg") String emailBody,HttpServletRequest request){
        ModelAndView view = null;
        StringBuffer sMsg = new StringBuffer();
        StringBuffer eMsg = new StringBuffer();
        boolean isAdmin = false;
        try{
        String loggedInUser = request.getHeader("sm_user").trim();
         isAdmin = getUserAdminRights(request);
        if(isAdmin){
            boolean status = emailService.sendEmailCommuncation(emailSubject,emailBody);
            if(status){
                sMsg.append(" Sending SiteMinder Notification Email was Success.");
            }
            else{
                eMsg.append(" Oops! Something went wrong while sending Email Notification. Pls check logs");
            }
        }
        else{
             view = new ModelAndView("redirect:/web/utilities/not_authorized");
             return view;
        }
        }
        catch(Exception ex){
            ex.printStackTrace();
            eMsg.append("Oops! Something went wrong while sending Email Notification. Pls check logs");
        }
        view = new ModelAndView("EmailCommunication");
        view.addObject("isAdmin", isAdmin);
        view.addObject("sMsg", sMsg.toString());
        view.addObject("eMsg", eMsg.toString());
        return view;
    }

在过去的 4 小时里,我真的很头疼……需要帮助。 谢谢..

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案1】:

    您需要在数据keys 周围加上引号。将 emailSubject: emailSub,emailMsg : emailBody 更改为 "emailSubject" : emailSub, "emailMsg" : emailBody

    您还缺少submitHandler 末尾的结束},可能只是粘贴错误?

    【讨论】:

    • @mike...我确实尝试将引号添加到键中..但没有运气..仍然遇到同样的错误..有什么想法..??
    • 在您的开发工具中,您能否在发送 AJAX 请求时看到这两个值都设置正确?
    • 您是否尝试过单步执行 Java 代码?如果是这样,它在哪里失败了?
    【解决方案2】:

    不要对数据进行字符串化

    改变

    data:JSON.stringify({emailSubject : emailSub,emailMsg : emailBody}),
    
     to
    
    data:{emailSubject : emailSub,emailMsg : emailBody},
    

    【讨论】:

    • 嗨 Piyush,我尝试不将数据字符串化..但没有运气...得到相同的异常..任何想法..
    【解决方案3】:

    我对我的 ajax 调用和现在用户 @RequestBody 的控制器进行了更改,现在它工作正常......

    我的 ajax 代码:

     submitHandler:function(form){
                var jsonObj = getData();        
                if(confirm("You are about to send Email Communication, Are you sure..?")){
                $.ajax({
                    type: "POST",
                    url:  $("#applicationUrl").val() +"/web/utilities/sendEmailMessage",
                    dataType: 'json',
                    cache:false,
                    headers: { 
                        'Content-Type': 'application/json' 
                        },
                    data:JSON.stringify(jsonObj),
                    //data: ({emailInfo : JSON.stringify({emailSubject:emailSub,emailMsg:emailBody})}),
                    success:function(response)
                    {
                        response.html();
                    },
                    error: function(x, t, m) {
                        console.trace();
                        if (!(console == 'undefined')) {
                        console.log("ERROR: " + x + t
                                + m);
                        }
                        }
               });
            }
                return false;
            }
    function getData(){
        var object ={
                emailSubject : $("#emailSubTxtArea").val(),
                emailMsg : $("#emailBodyTxtArea").val()
    
        };
        return object;
    
    
    }
    

    控制器:

    @RequestMapping(value="/sendEmailMessage",method=RequestMethod.POST)
        public ModelAndView sendEmailCommunication(@RequestBody EmailReqInfo emailInfo){
            ModelAndView view = null;
            StringBuffer sMsg = new StringBuffer();
            StringBuffer eMsg = new StringBuffer();
            boolean isAdmin = false;
            try{
            String loggedInUser = request.getHeader("sm_user").trim();
             isAdmin = getUserAdminRights(request);
                String emailSubject = emailInfo.getEmailSubject();
                String emailMsg  = emailInfo.getEmailMsg();
    --
    ----
    

    域名:-

        public class EmailReqInfo implements Serializable
        {
    
            private static final long serialVersionUID = 1L;
            private String emailSubject;
            private String emailMsg;
    
    //getters and setters
        }
    

    【讨论】:

      猜你喜欢
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 2015-03-10
      • 2017-07-24
      • 2018-10-08
      相关资源
      最近更新 更多