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

关于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 输出区间内所有的完数的个数。 要简单点的程序
  • ¥15 asp.core 权限控制怎么做,需要控制到每个方法
  • ¥20 while循环中OLED显示中断中的数据不正确
  • ¥15 这个视频里的stm32f4代码是怎么写的
  • ¥15 JNA调用DLL报堆栈溢出错误(0xC00000FD)
  • ¥15 请教SGeMs软件的使用
  • ¥15 自己用vb.net编写了一个dll文件,如何只给授权的用户使用这个dll文件进行打包编译,未授权用户不能进行打包编译操作?
  • ¥50 深度学习运行代码直接中断
  • ¥20 需要完整的共散射点成像代码
  • ¥15 编写vba代码实现数据录入工作