我正在尝试用Spring Boot重写我的登录文件。目前,我的数据被很好地发布,后端正在获取它,但是我的成功功能没有被解雇。我的后端没有抛出任何错误,但是我在浏览器中收到404错误。
这是我的帖子:
textField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
@objc func textFieldDidChange(_ textField: UITextField) {
let text = textField.text ?? ""
let trimmedText = text.trimmingCharacters(in: .whitespaces)
textField.text = trimmedText
}
控制器:
$.ajax({
type: "POST",
url: "login",
data: "&username=" + username.value + "&password=" + password.value
}).done(function(response) {
var resp = JSON.parse(response);
if (resp.loginResult === "false") {
//TODO
} else {
//TODO
}
});
我试图返回一个可以在前端进行解析的JSON字符串,并根据@Controller
@Scope("session")
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
public String login(HttpServletRequest request) {
HttpSession session = request.getSession();
StringBuilder json = new StringBuilder();
String username = request.getParameter("username");
String password = request.getParameter("password");
if (userExists()) {
session.setAttribute("isLoggedIn", "true");
session.setAttribute("userID", username);
session.setAttribute("userType", "employee");
json.append("{");
json.append("\"loginResult\": \"true\",");
json.append("\"resultMessage\": \"Logged in\"");
json.append("}");
} else {
System.out.println("Username or password does not match.");
json.append("{");
json.append("\"loginResult\": \"false\",");
json.append("\"resultMessage\": \"Bad Login\"");
json.append("}");
}
return json.toString();
}
}
进行所需的操作。抱歉,如果我的代码很丑陋,我还是Spring的新手,欢迎提出任何建议!
这是我的控制台在浏览器中的错误:
resultMessage
我假设我没有正确返回JSON字符串。
答案 0 :(得分:1)
是的,这是因为您没有正确发送JSON响应。
您可以做的是创建一个对象并设置其中的值,然后尝试使用JSON进行转换
new JSONSerializer().transform(new DateTransformer("MM/dd/yyyy HH:mm:ss"), java.util.Date.class).exclude("*.class").serialize(object);
并将响应发送到AJAX,如下所示:
return new ResponseEntity<String>(new JSONSerializer().transform(new DateTransformer("MM/dd/yyyy HH:mm:ss"), java.util.Date.class).exclude("*.class").serialize(object), HttpStatus.OK);
注意:如果要对Spring boot进行相同的操作,则@ResponseBody注释已足够。它将对象转换为JSON。
答案 1 :(得分:1)
如果使用Spring,请使用它提供的便利。您可以创建以下课程:
public class LoginResult {
private boolean loginResult;
private String resultMessage;
public LoginResult() { }
public String getResultMessage() {
return resultMessage;
}
public boolean isLoginResult() {
return loginResult;
}
public void setLoginResult(boolean loginResult) {
this.loginResult = loginResult;
}
public void setResultMessage(String resultMessage) {
this.resultMessage = resultMessage;
}
}
然后,您必须将控制器方法更改为:
@PostMapping("/login")
@ResponseBody
public LoginResult login(HttpServletRequest request) {
HttpSession session = request.getSession();
String username = request.getParameter("username");
String password = request.getParameter("password");
LoginResult loginResult = new LoginResult();
if (userExists()) {
session.setAttribute("isLoggedIn", "true");
session.setAttribute("userID", username);
session.setAttribute("userType", "employee");
loginResult.setLoginResult(true);
loginResult.setResultMessage("Logged in");
} else {
System.out.println("Username or password does not match.");
loginResult.setLoginResult(false);
loginResult.setResultMessage("Bad Login");
}
return loginResult;
}
@ResponseBody注释告诉控制器返回的对象会自动序列化为JSON,然后传递回HttpResponse对象。 source