2017-09-06 38 views
0

JavaScript代碼處理@RequestBody

function deleteMarks(list){ 
    $http.post('/api/marks/delete/all',list).then(
    function(response){ 
     refresh(); 
    },function(response){ 
     error(response.data.error) 
    } 
    ); 

控制器代碼

@PostMapping("/delete/all") 
public void deleteMarks(@RequestBody @Validated List<Long> request) { 

    marksService.deletemarks(request); 

} 

服務代碼

public void deletemarks(List<Long> list) { 
    for (Long id:list) { 
     marksRepository.delete(id); 
    } 
} 

我收到以下錯誤

angular.js:12759 POST http://localhost:8080/api/marks/delete/all 400() 

有人能告訴我我犯了什麼錯誤。

+0

JS'list'變量包含什麼?如您的控制器中所述,檢查您是否傳遞了與「標記」相對應的正確數據。 – OutOfMind

+0

此代碼實際上是一次刪除多個標記,因此列表包含需要刪除的所有標記的索引。 JS正在工作正確,這意味着數據從客戶端正確傳遞,但問題是我沒有收到控制器中的數據。 – PRIYANSHI

+0

你可以發佈你從角發送的json輸入嗎? –

回答

0

如果您通過JS的「標記清單」。該控制器處理程序應該是:

@PostMapping("/delete/all") 
public void deleteMarks(@RequestBody @Validated List<Marks> request) 
{ 
    marksService.deleteMarks(request); 
} 

如果你是路過只是「爲標誌的ID」,該處理方法應該是:

@PostMapping("/delete/all") 
public void deleteMarks(@RequestBody @Validated List<String> request) 
{ 
    marksService.deleteMarks(request); 
} 

另外,在您的服務代碼,如果你使用的是JpaRepository的delete方法,它只需要一個Mark對象作爲參數,因此您必須對標記列表運行一個循環,併爲每個標記調用delete

+0

我已經更新了我的服務代碼,請現在看看它我得到500()與>無法執行語句; SQL [n/a];嵌套異常是org.hibernate.exception.SQLGrammarException:無法執行語句 – PRIYANSHI

+0

請幫助我也這樣 – PRIYANSHI

+0

你可以在你的問題中發佈完整的堆棧跟蹤? – OutOfMind

0

400錯誤代碼顯示錯誤的請求。很可能您的請求結構與預期的請求結構不匹配。

-2

我已經遇到過這個問題,首先使用Postman檢查url,在後端處理這個請求的url,你也可以檢查在Postman的幫助下用JSON發送你的數據,你必須使用相同的url在$ http.post方法中。

+0

這是一個錯誤的請求錯誤,這意味着它無法訪問此處理程序方法。 – OutOfMind

+0

@OutOfMind我認爲,現在我正確的 –