2017-09-06 75 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我认为,现在我正确的 –