Dropwizard / Jackson returns 来自函数的 HTTP 代码 200 但 AJAX POST 出现错误
Dropwizard / Jackson returns HTTP code 200 from function but AJAX POST gets error
我是 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;
}
然后在前端我简单地 post 用户名和密码到 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 没有收到奇怪的数据,因为它成功发送了原始登录详细信息。有人可以帮忙吗?
按照 Enabling cors in dropwizard not working 的回答似乎解决了我的问题。这是 CORS 的问题。
我是 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;
}
然后在前端我简单地 post 用户名和密码到 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 没有收到奇怪的数据,因为它成功发送了原始登录详细信息。有人可以帮忙吗?
按照 Enabling cors in dropwizard not working 的回答似乎解决了我的问题。这是 CORS 的问题。