为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

动漫人物 2021-04-04 16:19:22
我正在尝试将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]
查看完整描述

2 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

问题是您正在使用@RequestParam从URL获取参数的参数,应该@RequestBody用于POST请求


我建议创建一个DTO对象,您可以使用它来读取POST请求的主体,如下所示:


public ResponseEntity<String> checkLogin(@RequestBody UserDTO userDTO){

随着DTO是这样的:


public class UserDTO {

  private String email;

  private String password;


  //getter & setters

}


查看完整回答
反对 回复 2021-04-22
?
繁星coding

TA贡献1797条经验 获得超4个赞

您可以按照以下方法进行操作:


使用contentType:“ application / json; charset = utf-8”,


创建一个域对象,该域对象是电子邮件和密码的包装,并使用@RequestBody读取json


public class Login{

 private String email;

 private String password;

 //Getters and Setters

}




@RequestMapping("/checkLoginAdministrator")

public ResponseEntity<String> checkLogin((@RequestBody Login login) {

 //logic

}


查看完整回答
反对 回复 2021-04-22
  • 2 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信