spring中根据请求体将相同的url映射到不同的方法

fra*_*nds 6 java spring spring-mvc

我想知道是否可以RestController仅基于请求正文将相同的 URL 映射到类中的不同方法。例如:

@RequestMapping(value="/delete", method=RequestMethod.POST )
public void delete(@RequestBody String id) {
    //do something
}

@RequestMapping(value="/delete", method=RequestMethod.POST )
public void delete(@RequestBody Book book) {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

请求正文将始终是 JSON 有效负载。如果是{"id":"foo"}我想要调用第一个方法。如果请求正文是:

{
    "title":"Spring Guide",
    "author":"John Doe"
}
Run Code Online (Sandbox Code Playgroud)

我想调用第二种方法。这可能吗?

fra*_*nds 5

仅通过有效负载是无法区分的。

根据我在这里所做的测试以及 M. Deinum 和 Ali Dehghani 的回应,我认为最好的方法是为每种情况设置不同的 url。因此,a/books/{id}通过 id 进行删除,a 则/books通过主体中的对象 JSON 来删除传递的对象。感谢所有评论。