leezy_aop 2022-05-27 12:44 采纳率: 100%
浏览 95
已结题

关于405状态码的奇怪错误(ajax和springmvc)

今天在做一个ajax和springmvc交互的时候,出现了一个很奇怪的错误
我直接贴出相关代码,请大家帮我看看
前端test1.html,就是一个表单的提交

<form  id="login" method="post">
    Email<input type="text" id="inputEmail3" name="email" placeholder="Email">
    Password<input type="password" id="inputPassword3" name="password" placeholder="Password">
    <button type="submit"onclick="sign()">Sign in</button>
</form>

<script>
    function sign() {
        var loginData = $("#login").serialize()//表单数据
        $.ajax({
            url: "/test04",
            data: loginData,
            type: 'POST',
            success: function (resp) {
                if (resp == "success") {
                    window.location.href = "/test.html"//test.html我就不再贴出,就一行helloword
                }
            }
        })
    }
</script>

后端controller

@PostMapping("/test04")
@ResponseBody
public String Test04(@RequestParam("email") String email,
                                @RequestParam("password") String password){

        System.out.println(email + " " + password);//可以正常输出
        return "success";
    }

视图跳转配置类

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    @Override//自定义视图跳转
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("test.html").setViewName("test");
        registry.addViewController("test1.html").setViewName("test1");
    }
}

浏览器输入localhost:8080/test1.html
填完表单数据后,点击sign in,第一次出现如下情况

img

第二次我再次访问localhost:8080/test1.html的时候

img

填完表单数据后,就可以正常跳转到hello word的页面了!真的好奇怪啊!

img

如果我将上述的controller换成如下,那么就直接变成405了,不管访问多少次。RequestBody 注解是用来接收前端的json数据的,可是 var loginData = $("#login").serialize()这句不就是序列化成字符串吗,我不太理解。

@PostMapping("/test04")
@ResponseBody
public String Test04(@RequestBody People people){
        System.out.println(people);//不可以输出
        return "success";
    }

如果将requestbody注解去掉,变成public String Test04(People people),那么将会出现我写的上面第一种的情况,也就是第一个次访问是405,后续访问就正常了。希望大家能帮我解答,请大家喝元气森林!

  • 写回答

8条回答 默认 最新

  • 低价多销 优享时代官方账号 2022-06-01 23:45
    关注

    405一般都是说前后端请求不匹配,比如后端post请求前端却用了get请求,你既然用了ajax来请求就要完全避免表单会发生表单它自己的请求,建议:把表单form标签简化,什么属性也不加,特别是button那个提交按钮最好不要留着type=“submit”这样和click事件的冲突

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 6月11日
  • 已采纳回答 6月3日
  • 创建了问题 5月27日

悬赏问题

  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!