我有一个使用HTML / jQuery的Web应用程序,该应用程序将AJAX / JSON与ic连接到具有Java EE / Spring MVC的后端系统.
在前端,可以通过填写表单字段来创建Person,然后将其提交并执行以下jQuery代码:
var person = $(this).serializeObject();
$.postJSON("add/", person, function(data) {
alert("Person with ID "+data.person.id+"' added successfully");
});
在最好的情况下,将创建Person,然后我将获得一个Person对象,然后可以使用data.person.*访问值.
现在,我想验证发送到后端系统的数据,如果发生错误,我想在第一步中显示警报错误消息.
我是在后端系统中完成的:
@RequestMapping(value="add/", method=RequestMethod.POST)
public @ResponseBody Map<String, ? extends Object> addPerson(@RequestBody Person p, HttpServletResponse response) {
Set<ConstraintViolation<Person>> failures = validator.validate(p);
if (!failures.isEmpty()) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return validationMessages(failures);
} else {
Person person = this.personService.addPerson(p);
return Collections.singletonMap("person", new SerialPerson(person.getId(), person.getName(), ...));
}
}
// internal helpers
private Map<String, String> validationMessages(Set<ConstraintViolation<Person>> failures) {
Map<String, String> failureMessages = new HashMap<String, String>();
for (ConstraintViolation<Person> failure : failures) {
failureMessages.put(failure.getPropertyPath().toString(), failure.getMessage());
System.out.println(failure.getPropertyPath().toString()+" - "+failure.getMessage());
}
return failureMessages;
}
我的Person对象被注释,然后得到System.out.println(failure.getPropertyPath().toString()“-” failure.getMessage());在控制台上,例如,“名称-必须介于1到30个字符之间”
但是如何在前端系统的jQuery中创建警报消息?
预先感谢您的帮助&最好的祝福.
更新:链接到Spring MVC AJAX示例,在该示例中找到了validationMessages方法.但是也没有解决方案如何获取错误消息.
解:
我必须致电:
jQuery.ajax({
'type': 'POST',
'url': "add/",
'contentType': 'application/json',
'data': JSON.stringify(person),
'dataType': 'json',
'success': function(data) {alert("success");},
'error': function(xhr) {alert(xhr.responseText);}
});
解决方法:
您可以执行以下操作:
var person = $(this).serializeObject();
$.postJSON("add/", person, function(data) {
if(data.person) {
alert("Person with ID "+data.person.id+"' added successfully");
}
else {
var errors = "";
for(var key in data) if(data.hasOwnProperty(key)) {
errors += data[key] + "\n";
}
alert(errors);
}
});
您也不需要发回错误的请求.这是你想要的吗?
更新
您可以使用Spring Source中显示的代码,但必须使用jQuery.ajax
jQuery.ajax({
type: 'POST',
url: "add/",
data: person,
dataType: "json",
success: function(data) {
alert("Person with ID "+data.person.id+"' added successfully");
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
var errorJSON = JSON.parse(XMLHttpRequest.responseText); //if this is JSON otherwise just alerting XMLHttpRequest.responseText will do
var errors = "";
for(var key in errorJSON) if(errorJSON.hasOwnProperty(key)) {
errors += errorJSON[key] + "\n";
}
alert(errors);
}
});