2017-09-14 49 views
1

我目前使用的是spring引導,我想從ajax發送對象到控制器進行驗證。我知道你可以通過ModelAttribute正常提交表單,但是我想用ajax進行驗證。但是ajax函數每次都會返回400錯誤或415錯誤,我嘗試過在每個地方都尋找解決方案,但它確實沒有幫助。ajax表單發佈函數返回400錯誤

我的視圖:

<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> 

我的控制器:

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

我的實體:

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(); 
    } 
} 

如果刪除的contentType: 「應用程序/ JSON」 從AJAX函數返回一個415錯誤,如果我保留它會返回400錯誤。請幫忙。

Browser console 的IDE控制檯返回此以下錯誤:

.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

$( 「#表」)序列化(。 )給你一個字符串,你需要把你的html表單變成一個json對象,然後將它傳遞給彈簧控制器 – spiritwalker

+0

哦......請原諒我的無知,但我如何解析爲JSON。我對此很陌生。預先感謝 – NganCun

+0

請看下面的答案,用{id:「Id輸入的值,名稱:」name輸入的值「替換$(」#Form「)。serialize()} – spiritwalker

回答

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()); 
    }}); 

在請求主體的JSON對象必須符合你的後端模式PersonRequest

+0

是否有任何方法可以發送整個表單,而不必像你所說的那樣將每個屬性都放入數據中?因爲如果對象有更多的屬性,這將是很難做到這一點 – NganCun

+0

@NganCun我更新了答案,在發佈之前對json對象進行了字符串化。如果從html表單構建json對象的條款已經有了一個很好的解決方案。 https://stackoverflow.com/questions/1184624/convert-form-data-to-javascript-object-with-jquery – spiritwalker