我有一个带有HTML / jQuery的web应用程序,它使用AJAX / JSON连接到带有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());
,例如,“name - 必须在1-30个字符之间”
但是如何在前端系统中的jQuery中创建警报消息?
提前感谢您的帮助&amp;最诚挚的问候。
更新:链接到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);}
});
答案 0 :(得分:3)
您可以这样做:
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);
}
});