JavaScript-如何从基于Spring MVC的后端系统显示错误消息

我有一个使用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);
   }
});
上一篇:Java-Grails:验证文件上传


下一篇:在PHP中删除换行符-但它们仍在MySQL的LONGTEXT中显示