Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-如何显示来自基于SpringMVC的后端系统的错误消息_Java_Javascript_Jquery_Validation_Spring Mvc - Fatal编程技术网

JavaScript-如何显示来自基于SpringMVC的后端系统的错误消息

JavaScript-如何显示来自基于SpringMVC的后端系统的错误消息,java,javascript,jquery,validation,spring-mvc,Java,Javascript,Jquery,Validation,Spring Mvc,我有一个带有HTML/jQuery的web应用程序,它通过AJAX/JSON连接到带有JavaEE/SpringMVC的后端系统 在前端,可以通过填写表单字段创建人员,然后提交并执行以下jQuery代码: var person = $(this).serializeObject(); $.postJSON("add/", person, function(data) { alert("Person with ID "+data.person.id+"' added successfull

我有一个带有HTML/jQuery的web应用程序,它通过AJAX/JSON连接到带有JavaEE/SpringMVC的后端系统

在前端,可以通过填写表单字段创建人员,然后提交并执行以下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;
}

您可以这样做:

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源代码中显示的代码,但必须使用


如果我删除行
response.setStatus(HttpServletResponse.SC\u BAD\u REQUEST),这就可以工作否则它不工作。但是为什么在教程中这样做呢?@Tim My bad,当我写它的时候,我意识到我犯了一个错误。从概念上讲,发回一个错误的请求是有意义的,因为您遇到了一个错误。但是,我不知道您将如何发回错误消息的详细信息。(也许你可以评估文本状态…丑陋)。因此,在您的情况下,您应该删除该行,因为您确实希望返回错误消息。我想我必须将错误消息放在错误响应中,代码400=SC\u BAD\u REQUEST。然后必须有一种方法将其引入前端系统。但我也不知道…我也没试过那样做。虽然概念上更准确,但从前端处理起来有点困难。我发现:-搜索
$([class=textLink])。单击(function(){
,有一个
$.ajax()
调用
success
error
部分,也许这是可行的?但我不知道如何转换我的`$.postJSON()`到
$.ajax()
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);
    }
});
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);
   }
});