发布404错误,但是我的服务器可以正常运行数据,但无法正常返回

时间:2018-07-09 21:51:34

标签: java jquery spring spring-mvc spring-boot

我正在尝试用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字符串。

2 个答案:

答案 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