我正在尝试将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);
}
我可以通过console.log()
看到的json如下:
{"email":"fantasticemail@email.it","password":"1234"}
在IJ控制台中,我得到此Java WARN:
Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'email' is not present]
答案 0 :(得分:2)
问题是您正在使用@RequestParam
,它从网址中获取参数,您应该使用@RequestBody
进行POST请求
我建议创建一个DTO对象,您可以使用它来读取POST请求的正文,如下所示:
public ResponseEntity<String> checkLogin(@RequestBody UserDTO userDTO){
DTO是这样的:
public class UserDTO {
private String email;
private String password;
//getter & setters
}
答案 1 :(得分:0)
您可以按照以下方法进行操作:
使用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
}