Ajax提交数据SpringBoot后台报错“HttpMessageNotReadableException: JSON parse error: Cannot construct instance“

异常

2021-06-24 13:57:55.164  WARN 20900 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `com.example.demo.bean.User` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('username=root&password=adsd'); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.example.demo.bean.User` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('username=root&password=adsd')
 at [Source: (PushbackInputStream); line: 1, column: 1]]

错误代码

提交了ajax请求的login.html代码如下:




    
    登录
    


用户名:
密码:

后台处理请求的控制器类代码UserController.java

@Controller
public class UserController {
    @GetMapping("/")
    public String toLogin() {
        return "login";
    }

    @PostMapping("/login")
    @ResponseBody
    public String login(@RequestBody User user) {
        System.out.println(user);
        return user.toString();
    }
}

原因

查看浏览器控制台发出的请求,是json类型的数据

Ajax提交数据SpringBoot后台报错“HttpMessageNotReadableException: JSON parse error: Cannot construct instance“_第1张图片

但我们实际查看发出的数据是""username=root&password=adsd"",这种数据一看就不符合JSON格式,所以后台的控制器无法解析成正确的对象,因为这根本就是错误格式的JSON数据。

查看错误代码我们前端采用的是JSON.stringify($('#loginForm').serialize())来快速获取表单中的各参数,但这不行,因为$('#loginForm').serialize()获取的不是JSON格式的对象。

解决

传递正确JSON格式的数据给后台,不要使用$('#loginForm').serialize()来获取JSON对象数据,这是行不通的。

正确代码

注意data的值,那才是正确的JSON格式数据。

    function login() {
        $.ajax({
            url: "login",
            type: "POST",
            data:JSON.stringify({"username":"zhangsan","password":"123456"}),
            contentType:"application/json",
            success: function (data) {
                alert("请求成功!")
            },
            error: function () {
                alert("请求失败!")
            }
        })
    }

再来测试,后台成功接收,传递的正是JSON格式的数据

Ajax提交数据SpringBoot后台报错“HttpMessageNotReadableException: JSON parse error: Cannot construct instance“_第2张图片

你可能感兴趣的:(异常处理,SpringBoot,Ajax)