【问题标题】:404 error on post, but my server gets the data fine but does not return properly发布时出现 404 错误,但我的服务器可以正常获取数据但无法正确返回
【发布时间】:2018-07-09 21:51:34
【问题描述】:

我正在尝试使用 Spring Boot 重写我的登录部分。目前,我的数据发布得很好,后端正在获取它,但我的成功功能没有被触发。我的后端没有抛出任何错误,但我在浏览器上收到 404 错误。

这是我的帖子:

$.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
    }
});

控制器:

@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();
    }
}

我试图只返回一个可以在前端解析的 JSON 字符串,并根据resultMessage 做任何需要做的事情。对不起,如果我的代码很丑,我还是 Spring 新手,欢迎任何建议!

这是我浏览器控制台中的错误:

POST http://localhost:8080/BedrockWeb/login 404 ()

我假设我没有正确返回我的 JSON 字符串。

【问题讨论】:

  • 为什么不创建一个对象然后返回该对象。 Spring会将对象转换为Json

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


【解决方案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

【讨论】:

    【解决方案2】:

    是的,这是因为您没有正确发送 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。

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 2022-12-06
      • 2016-10-14
      • 1970-01-01
      相关资源
      最近更新 更多