Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “弹簧启动错误”;请求方法';邮政';“不支持”;使用Ajax函数_Java_Ajax_Spring Boot_Spring Mvc_Model View Controller - Fatal编程技术网

Java “弹簧启动错误”;请求方法';邮政';“不支持”;使用Ajax函数

Java “弹簧启动错误”;请求方法';邮政';“不支持”;使用Ajax函数,java,ajax,spring-boot,spring-mvc,model-view-controller,Java,Ajax,Spring Boot,Spring Mvc,Model View Controller,我有一个带有url的页面”http://localhost:8080/clientes/cadastrar“我在这个页面上有一个按钮,当按下按钮时会打开一个模式来插入一些信息(姓名、电子邮件等)。问题是,当我在此模式中单击“Save button”(保存按钮)并使用onclick函数调用Ajax函数时,会出现以下错误: 2021-03-11 16:30:31.973 WARN 1200 --- [nio-8080-exec-5] .w.s.m.s.DefaultHandlerException

我有一个带有url的页面”http://localhost:8080/clientes/cadastrar“我在这个页面上有一个按钮,当按下按钮时会打开一个模式来插入一些信息(姓名、电子邮件等)。问题是,当我在此模式中单击“Save button”(保存按钮)并使用onclick函数调用Ajax函数时,会出现以下错误:

2021-03-11 16:30:31.973  WARN 1200 --- [nio-8080-exec-5] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]
以下是AJAX函数:

<script th:src="js/AddEmailCliente.js" th:fragment="js"></script>
    <script th:inline="javascript" th:fragment="inlinescript">
function salvarEmail() {
        
        var cliente = /* [[cliente]] */ 0;
        var nome = Document.getElementById('nome').value;
        var email = Document.getElementById('email').value;
        var envio_cobranca = Document.getElementById('envio_cobranca').checked ? true : false;
        
        
        $.ajax({
            url : "/emails/salvar",
            type : 'POST',
            contentType : 'application/json',
            data : JSON.stringify({
                idcliente : 'cliente.idcliente',
                nome : nome,
                email : email,
                envio_cobranca : envio_cobranca
            }),
            success : function(data) {
                session = data.session;
            }
        });
         
         
     } 
    
    </script>

在navigator控制台中,我可以看到:

Request URL: http://localhost:8080/emails/salvar
Request Method: POST
Status Code: 405 
Remote Address: [::1]:8080
Referrer Policy: strict-origin-when-cross-origin

所以URL是正确的

按钮代码:

<div class="modal-footer">
                        <button id="add_email" type="button"
                            class="btn btn-primary waves-effect waves-light"
                            th:id="${'addEmail_emails/salvar/' + cliente.id}"
                            onclick="salvarEmail();">Salvar</button>

这是否与我使用模式有关(当我打开模式时,URL不会改变,保持与此电子邮件方法URL不相关)http://localhost:8080/clientes/cadastrar或者我使用onclick函数而不是表单提交?

尝试将
@PostMapping(“/salvar”)
更改为
@PostMapping(path=“/salvar”)
尝试将
@PostMapping(/salvar”)
更改为
@PostMapping(path=“/salvar”)
我认为您需要CSRF令牌。由于Spring安全性,我认为您需要CSRF令牌。由于Spring安全性,请尝试将CSRF令牌和头与POST请求一起发送

function salvarEmail() {
        var token = $('#_csrf').attr('content');
        var header = $('#_csrf_header').attr('content');

        var cliente = /* [[cliente]] */ 0;
        var nome = Document.getElementById('nome').value;
        var email = Document.getElementById('email').value;
        var envio_cobranca = Document.getElementById('envio_cobranca').checked ? true : false;


        $.ajax({
            beforeSend: function (xhr) {
                xhr.setRequestHeader("Accept", "application/json");
                xhr.setRequestHeader(header, token);
            },
            url : "/emails/salvar",
            type : 'POST',
            contentType : 'application/json',
            data : JSON.stringify({
                idcliente : 'cliente.idcliente',
                nome : nome,
                email : email,
                envio_cobranca : envio_cobranca
            }),
            success : function(data) {
                session = data.session;
            }
        });


    }

尝试将csrf令牌和标头与POST请求一起发送

function salvarEmail() {
        var token = $('#_csrf').attr('content');
        var header = $('#_csrf_header').attr('content');

        var cliente = /* [[cliente]] */ 0;
        var nome = Document.getElementById('nome').value;
        var email = Document.getElementById('email').value;
        var envio_cobranca = Document.getElementById('envio_cobranca').checked ? true : false;


        $.ajax({
            beforeSend: function (xhr) {
                xhr.setRequestHeader("Accept", "application/json");
                xhr.setRequestHeader(header, token);
            },
            url : "/emails/salvar",
            type : 'POST',
            contentType : 'application/json',
            data : JSON.stringify({
                idcliente : 'cliente.idcliente',
                nome : nome,
                email : email,
                envio_cobranca : envio_cobranca
            }),
            success : function(data) {
                session = data.session;
            }
        });


    }


将return“OK”替换为重定向,看看会发生什么。我认为不支持的部分与重定向的URL有关。没有得到…我应该替换return“redirect:/emails/listar”为什么?我还在帖子中添加了一个响应标题信息,似乎只允许get,但我不知道为什么可以在salvar方法中输入?出于某种奇怪的原因,似乎服务器告诉您,对于特定的URL,只支持get方法。查看您从响应中得到的信息。“允许:get”是的,我想我不能进入方法内部。我不知道这个问题是否与模式在具有不同url的页面中打开有关(不是…/电子邮件)发生了一些冲突。我的重点是,我认为错误与重定向字符串有关。我要求您替换它,以查看错误是否会更改。但实际上,我不明白在通过Ajax调用API时为什么要执行重定向。替换返回“OK”使用重定向,看看会发生什么。我认为不受支持的部分与重定向的URL有关。没有得到…我应该替换return“redirect:/emails/listar”为什么?我还在帖子中添加了一个响应标题信息,似乎只允许get,但我不知道为什么可以在salvar方法中输入?出于某种奇怪的原因,似乎服务器告诉您,对于特定的URL,只支持get方法。查看您从响应中得到的信息。“允许:get”是的,我想我不能进入方法内部。我不知道这个问题是否与模式在具有不同url的页面中打开有关(不是…/电子邮件)有些冲突发生了。我的重点是,我认为错误与重定向字符串有关。我让你替换它,看看错误是否会改变。但实际上,我不明白你为什么在通过Ajax调用API时进行重定向。已经尝试过了,但仍然得到相同的错误“@RestController”是用于创建Restful控制器的方便注释。它添加了“@Controller”和“@ResponseBody”注释。它将响应转换为JSON。@Jordy是的,你是对的,RestController在这里没有帮助,更新了应答尝试,没有起作用吗?你是否尝试使用没有方法的RequestMapping注释而不是PostMapping?已经尝试过了,但仍然得到相同的错误“@RestController”是用于创建Restful控制器的方便注释。它添加了“@Controller”和“@ResponseBody”注释。它将响应转换为JSON。@Jordy是的,你是对的,RestController在这里没有帮助,更新了应答尝试,不是吗?你是否尝试使用没有方法的RequestMapping注释而不是PostMapping?如果你也共享代码来支持你在注释中所说的内容,那就更好了。如果tter如果您也共享代码以支持您在评论中所说的内容。非常感谢!它解决了这个特定错误,但现在我得到了错误“jquery.min.js:4 Uncaught TypeError:无法读取未定义的属性'toLowerCase'。非常感谢!它解决了这个特定错误,但现在我得到了错误“jquery.min.js:4未捕获类型错误:无法读取未定义的属性'toLowerCase'。
function salvarEmail() {
        var token = $('#_csrf').attr('content');
        var header = $('#_csrf_header').attr('content');

        var cliente = /* [[cliente]] */ 0;
        var nome = Document.getElementById('nome').value;
        var email = Document.getElementById('email').value;
        var envio_cobranca = Document.getElementById('envio_cobranca').checked ? true : false;


        $.ajax({
            beforeSend: function (xhr) {
                xhr.setRequestHeader("Accept", "application/json");
                xhr.setRequestHeader(header, token);
            },
            url : "/emails/salvar",
            type : 'POST',
            contentType : 'application/json',
            data : JSON.stringify({
                idcliente : 'cliente.idcliente',
                nome : nome,
                email : email,
                envio_cobranca : envio_cobranca
            }),
            success : function(data) {
                session = data.session;
            }
        });


    }