2017-09-14 1 views
1

Ich benutze derzeit Spring Boot, und ich möchte Objekt von Ajax an Controller zur Validierung senden. Ich weiß, dass Sie das Formular normalerweise mit ModelAttribute einreichen können, aber ich möchte mit Ajax zur Validierung einreichen. Aber die Ajax-Funktion gibt immer einen 400-Fehler oder einen 415-Fehler zurück, ich habe versucht, überall nach Lösungen zu suchen, aber das hilft nicht wirklich.Ajax Form Post-Funktion eine 400 Fehler

meiner Sicht:

<form id="Form"> 
     <input name="id"></input> 
     <input name="name"></input> 
     <button type="submit" class="btn btn-default" id="button"></button> 
    </form> 
    <script> 
     $(document).ready(function(){ 
      $("#button").click(function(e){ 
       e.preventDefault(); 
       $.ajax({ 
        type: "POST", 
        url : "/Test", 
        async: false, 
        dataType : "json", 
        data : $("#Form").serialize(), 
        contentType: "application/json", 
        success : function(result){ 
         if(result == null){ 
          alert("Succ"); 
         } 
         else{ 
          alert("not null"); 
         } 
        }, 
        error : function(){ 
         console.log('here'); 
         alert($("#Form").serialize()); 
        } 
       }); 
      }); 
     }); 
    </script> 

mein Controller:

@RequestMapping(value = "/Test",method = RequestMethod.POST) 
    public @ResponseBody PersonRequest test(@RequestBody PersonRequest person) { 
     return person; 
    } 

meine Einheit:

public class PersonRequest { 

    @NotNull 
    private long id; 

    @NotEmpty 
    private String name; 

    public long getId() { 
     return id; 
    } 
    public void setId(long id) { 
     this.id = id; 
    } 
    public String getName() { 
return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public PersonRequest() { 
     super(); 
    } 
} 

Wenn ich content entfernen: "application/json" von Ajax-Funktion gibt es eine 415 Fehler, und wenn ich es behalte, gibt es einen 400 Fehler zurück. Bitte helfen Sie.

Browser console Die IDE-Konsole Rückkehr dies folgende Fehlermeldung:

.w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized token 'id': was expecting ('true', 'false' or 'null'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'id': was expecting ('true', 'false' or 'null') 
at [Source: [email protected]; line: 1, column: 4] 
+1

$ PersonRequest übereinstimmen ("# Form") serialisiert werden (.) gibt Ihnen eine Zeichenfolge, Sie müssen Ihre HTML-Formular in ein JSON-Objekt und dann an Feder-Controller übergeben – spiritwalker

+0

oh ... entschuldigen Sie meine Ignoranz, aber wie analysiere ich es in JSON. Ich bin etwas neu dazu. Vielen Dank im Voraus – NganCun

+0

siehe meine Antwort unten, ersetzen $ ("# Form"). Serialize() mit {ID: "Wert der ID-Eingabe", Name: "Wert der Namenseingabe"} – spiritwalker

Antwort

1
$.ajax({ 
    type: "POST", 
    url : "/Test", 
    async: false, 
    dataType : "json", 
    data : JSON.stringify({id:"value of Id input", name: "value of name input"}), 
    contentType: "application/json", 
    success : function(result){ 
    if(result == null){ 
     alert("Succ"); 
    } 
    else{ 
     alert("not null"); 
    } 
    }, 
    error : function(){ 
    console.log('here'); 
    alert($("#Form").serialize()); 
    }}); 

Das JSON-Objekt in Anfrage Körper Backend Modell

+0

gibt es eine Möglichkeit, das gesamte Formular zu senden und nicht jedes Attribut in Daten {} wie Sie gesagt haben? weil, wenn das Objekt eine Menge mehr Attribute hat, wird es schwer sein, das zu tun – NganCun

+0

@NganCun Ich aktualisierte die Antwort zu json-Objekt vor dem Post zu string. Wenn Begriffe zum Erstellen eines JSON-Objekts aus HTML-Formular, gibt es bereits eine elegante Lösung. https://stackoverflow.com/questions/1184624/convert-form-data-to-javascript-object-with-jquery – spiritwalker