【问题标题】:Dropwizard / Jackson returns HTTP code 200 from function but AJAX POST gets errorDropwizard / Jackson 从函数返回 HTTP 代码 200 但 AJAX POST 出错
【发布时间】:2015-02-27 16:59:23
【问题描述】:

我是 Dropwizard 的新手,在从 POJO 转换为 Json 时遇到了一些麻烦。我在前端使用 jQuery,我用 POST 类型调用 ajax 函数。我正在尝试针对 MySQL 数据库中的数据验证登录。我知道数据库已连接,并且可以根据在 HTML 登录页面上输入的凭据在数据库中找到正确的用户。

这是后端代码:

    @POST
@UnitOfWork
@Path("/login")
@Produces("application/json")


public User login(String credentials) {

    try {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode root = mapper.readValue(credentials, JsonNode.class);
        String  username = root.get("Username").toString().replaceAll("\"", "");
        String password = root.get("Password").toString().replaceAll("\"", "");

        User user = userDAO.findByUsername(username);

        //Check password matches and respond
        boolean passwordMatched = user.isPasswordMatched(password);

        //Return correct response
        if (passwordMatched) {
            return user;
        }
    }
    catch (Exception e) {
        System.out.println(e.getMessage());
    }

    return null;

}

然后在前端我只是将用户名和密码发布到 url:

    $(document).ready(function() {

    $("#login").click(function() {

        var username = $("#username").val();
        var password = $("#password").val();

        $.ajax({

            url:'http://localhost:8080/User/login',
            type: 'POST',
            data: JSON.stringify({"Username" : username, "Password" : password}),
            complete: function(data, status) {
                alert("Status: " + status + "Data: " + JSON.stringify(data));
            }

        });

服务器的控制台输出是 HTTP 代码 200,当我在登录函数中设置断点时,我可以看到找到并从函数返回的正确数据库条目。但是,从 jQuery 代码完成时触发的警报会打印错误。

根据JsonLint从我的服务器返回的数据是有效的JSon。所以看起来 ajax 没有接收到奇怪的数据,因为它成功发送了原始登录详细信息。有人可以帮忙吗?

【问题讨论】:

  • 那么您不认为知道该错误是什么会有所帮助吗?尝试设置dataType。此外,如果您想发送 JSON 需要让 ajax 知道,因为这不是默认的 contentType
  • @charlietfl 关于错误...如您所见,我打印返回的字符串化数据,其中打印 {"readystate" : 0, "status" : 0, "statusText" : "error "} 另外,设置 contentType 会导致我的服务器代码不触发。我知道这一点是因为我在函数上设置了一个断点。设置 dataType 也没有什么区别。如... contentType: 'application/json', dataType: 'json',
  • 添加适当的错误处理程序将为您提供更多详细信息。但您也可以在浏览器控制台网络选项卡中检查实际请求并查看请求的所有部分,包括标头、状态、发送/接收的数据
  • 嗯...现在我们已经到了某个地方。控制台显示:XMLHttpRequest 无法加载localhost:8080/User/login。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'null'。
  • 好的,跨域请求也是如此。要么需要启用 CORS,要么确保向相同的端口、协议和子域发出请求。甚至www.domain.com vs domain.com 都被认为是跨域请求

标签: java jquery ajax jackson dropwizard


【解决方案1】:

按照Enabling cors in dropwizard not working 的答案似乎解决了我的问题。这是 CORS 的问题。

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 2014-01-24
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多