У меня проблема с отправкой данных JSON на контроллер с помощью AJAX - PullRequest
2 голосов
/ 01 октября 2019

У меня проблема с отправкой данных json на контроллер с помощью ajax.

Я думаю, что отправил данные правильно, но получаю следующее предупреждение.

org.springframework.web.servlet. mvc.support.DefaultHandlerExceptionResolver - решено [org.springframework.web.bind.MissingServletRequestParameterException: обязательный параметр int 'bno' отсутствует]

code:400
message:HTTP Status 400 – Bad Requesth1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}<h1>HTTP Status 400 – Bad Request</h1><p><b>Type</b> Status Report</p><p><b>Message</b> Required int parameter &#39;bno&#39; is not present</p><p><b>Description</b> The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).</p><h3>Apache Tomcat/8.5.34</h3>

Я покажу свой код Ajax

var headers = {"Content-Type" : "application/json"
        ,"X-HTTP-Method-Override" : "DELETE"
      };
$.ajax({
          url: root+"/restcmt/"+uid+"/"+cno
              , headers: headers
              , type: 'DELETE'
              , data : JSON.stringify({"bno":bno})
              , beforeSend : function(xhr){
                    xhr.setRequestHeader(_csrf_name, _csrf_token);
                }
              , success: function(result){
                  showcmtlist(bno);
              }
              , error: function(request,status,error){
                console.log("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);


                }
          });

И мой контроллер

    @RequestMapping(value="/{uid}/{cno}", method=RequestMethod.DELETE)
    public void deletecmt(@PathVariable int cno ,@PathVariable String uid,@RequestParam int bno
            ,@AuthenticationPrincipal SecurityCustomUser securityCustomUser) throws Exception{

    }

и запрос полезной нагрузки

{"bno":14}

Я не уверен, что не так. Что не так?

Ответы [ 2 ]

3 голосов
/ 01 октября 2019

{"bno": bno} находится в теле запроса. Таким образом, ваш метод контроллера должен быть @RequestBody int bno. @RequestParam для параметров запроса сервлета. т.е.: /uid/cno?bno=14

разница для справки: В чем разница между @RequestBody и @RequestParam?

1 голос
/ 01 октября 2019

В запросе Spring-World полезная нагрузка должна соответствовать @RequestBody, например:

public SomethingElse updateValue(@RequestBody Something value) {
    // ...
}

Где "Something" - это любой POJO.

Чтобы использовать @RequestParam, смотрите:https://github.com/jquery/jquery/issues/3269

($. Ajax Отправляет свойство data в теле DELETE вместо строки запроса)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...