代码之家  ›  专栏  ›  技术社区  ›  cela

404 post错误,但我的服务器得到的数据很好,但返回不正确

  •  0
  • cela  · 技术社区  · 6 年前

    我正试图用SpringBoot重写我的登录条目。目前,我的数据发布良好,后端正在获取,但我的成功功能没有被激发。我的后端没有抛出错误,但我在浏览器上收到了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 是的。抱歉,如果我的代码是丑陋的,我仍然是新的春天,欢迎任何建议!

    以下是浏览器上“我的控制台”中的错误:

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

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   cela    6 年前

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

        2
  •  1
  •   SummertimeSadness    6 年前

    如果您使用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