我正在尝试调用我的控制器的删除方法:
春天:
@RestController
@RequestMapping("/api")
@CrossOrigin
public class Controller
{
@DeleteMapping("thing/item/{name}")
public void deleteThing(@PathVariable String name)
{
System.out.println("CALL"); // Never called!!!
}
}
角度 7:
deleteTemplate(name: string) {
const url = `host/api/thing/item/${name}`;
return this.http.delete(url);
}
我发现了一些关于包括选项的东西:
httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};
deleteTemplate(name: string) {
const url = `${host}/api/thing/item/${name}`; // host is not relevant, same path with GET works.
return this.http.delete(url, this.httpOptions);
}
但我认为甚至不需要它,因为我发送的所有内容都在链接本身中(没有 json)。
每次它:
WARN 15280 --- [io-8443-exec-10] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'DELETE' not supported]
如何解决这个问题?
DELETE 发送时带有 405 错误和前面的 OPTIONS(带有 200 代码)。它到达服务器并执行此错误。
编辑
上面是一个经过简化但仍然不起作用的代码示例。我理解你的意见,但主机可以是任何东西,在这里无关紧要。它现在和前面提到的本地主机 - 它在到达端点的意义上起作用。
为了检查我是否错了,我这样做了:
@Autowired
private RequestMappingHandlerMapping requestMappingHandlerMapping;
this.requestMappingHandlerMapping.getHandlerMethods()
.forEach((e, k) -> System.out.println(e + " OF " + k));
启动后,它打印了我期望的所有内容,包括:
{GET /api/thing/item/{name}} OF public myPackage.Thing myPackage.Controller.getThing(java.lang.String)
{DELETE /api/thing/item/{name}} OF public void myPackage.Controller.deleteThing(java.lang.String)
有任何想法吗?
