我正在尝试将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
}
繁星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
}
添加回答
举报
0/150
提交
取消