Spring-Boot Controller无法识别来自Ajax的数据

我正在尝试将Ajax中的json(电子邮件和密码)发送到Spring-Boot中的Controller方法。


我确定我是从html提取数据并以正确的方式在json中进行解析,但控制器仍然表示缺少电子邮件期望字段。我也使用了form.serialized()但没有任何变化,所以我决定创建自己的对象,然后将其解析为json。


单击提交按钮时,Ajax调用开始:


function login() {

var x = {

    email : $("#email").val(),

    password : $("#password").val()

  };

$.ajax({

    type : "POST",

    url : "/checkLoginAdministrator",

    data : JSON.stringify(x),

    contentType: "application/json",

    dataType: "json",

    success : function(response) {

        if (response != "OK")

            alert(response);

        else

            console.log(response);

    },

    error : function(e) {

        alert('Error: ' + e);

      }

});

这是控制器内部的方法:


@RequestMapping("/checkLoginAdministrator")

public ResponseEntity<String> checkLogin(@RequestParam(value = "email") String email,

                                         @RequestParam(value = "password") String password) {

    String passwordHashed = Crypt.sha256(password);


    Administrator administrator = iblmAdministrator.checkLoginAdministrator(email, passwordHashed);


    if (administrator != null) {

        Company administratorCompany = iblmCompany.getAdministratorCompany(administrator.getCompany_id());


        String administratorCompanyJson = new Gson().toJson(administratorCompany);


        return new ResponseEntity<String>(administratorCompanyJson, HttpStatus.OK);

    }

    return new ResponseEntity<String>("{}", HttpStatus.OK);

}

我可以通过json看到的jsonconsole.log()如下:


{"email":"fantasticemail@email.it","password":"1234"}

在IJ控制台中,我得到以下Java WARN:


Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'email' is not present]


动漫人物
浏览 200回答 2
2回答

慕盖茨4494581

问题是您正在使用@RequestParam从URL获取参数的参数,应该@RequestBody用于POST请求我建议创建一个DTO对象,您可以使用它来读取POST请求的主体,如下所示:public ResponseEntity<String> checkLogin(@RequestBody UserDTO userDTO){随着DTO是这样的:public class UserDTO {&nbsp; private String email;&nbsp; private String password;&nbsp; //getter & setters}

繁星coding

您可以按照以下方法进行操作:使用contentType:“ application / json; charset = utf-8”,创建一个域对象,该域对象是电子邮件和密码的包装,并使用@RequestBody读取jsonpublic class Login{&nbsp;private String email;&nbsp;private String password;&nbsp;//Getters and Setters}@RequestMapping("/checkLoginAdministrator")public ResponseEntity<String> checkLogin((@RequestBody Login login) {&nbsp;//logic}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript