我正在经历一个浪费我大量时间的小问题......
出于演示目的,我使用Eclipse New>创建了一个简单的SpringBoot应用程序。 Spring Starter项目。
这是我的Application类:
package it.asirchia;
//All needed imports
@SpringBootApplication
public class Application {
public static HashMap<Long,Book> books = new HashMap<Long, Book>();
public static HashMap<Long,Editor> editors = new HashMap<Long, Editor>();
public static HashMap<Long,Person> authors = new HashMap<Long, Person>();
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
然后我创建了 EditorsApis 控制器:
package it.asirchia.apis;
//All needed imports
@RestController
@RequestMapping(value="/editors")
public class EditorsApis {
private static long counter = 0;
@RequestMapping(value="/", method=RequestMethod.GET)
public HashMap<Long, Editor> getAllEditor(){
return Application.editors;
}
@RequestMapping(value="/", method=RequestMethod.POST)
public void postNewEditor(@RequestBody Editor editor){
Application.editors.put(counter++, editor);
}
@RequestMapping(value="/{editorid}", method=RequestMethod.PUT)
public void updateEditor(@PathVariable long editorid,
@RequestBody Editor editor){
Application.editors.put(editorid, editor);
}
@RequestMapping(value="/{editorid}", method=RequestMethod.GET)
public Editor getEditor(@PathVariable long editorid){
return Application.editors.get(editorid);
}
@RequestMapping(value="/{editorid}", method=RequestMethod.DELETE)
public void deleteEditor(@PathVariable long editorid){
Application.editors.remove(editorid);
}
}
AuthorsApis 和 BooksApis 控制器与 EditorApis 非常相似。
当然我也创造了所有三个Pojos: Editor.class , Person.class 和 Book.class
我启动了Eclipse嵌入式Spring运行时,我可以看到所有路径都已正确映射:
INFO [main] s.w.s.m.m.a.RequestMappingHandlerMapping Mapped“ {[/ authors /],methods = [GET]}“on public java.util.HashMap it.asirchia.apis.AuthorsApis.getAllAuthors()
等等我已实现的所有其他Rest API。 日志的最后三行是:
在阶段0中启动bean
Tomcat在端口上启动:8080(http)
在5.547秒内启动应用程序(JVM运行6.169)
好的,对我来说,一切都已正确配置,正常运行。但是当我尝试调用
时GET /authors HTTP/1.1
Host: localhost:8080
我获得:
{
"timestamp": 1507286437765,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/authors"
}
对于 ALL 我实现的REST API也是如此。 有任何关于这个问题的原因的想法? 谢谢。
答案 0 :(得分:3)
以下映射将为您工作 localhost:8080 / authors / 。因为在您的方法映射GET中,您添加了“/”,因此您还应在URL中提供尾部斜杠。如果您想要像 localhost:8080 / authors 这样的映射,请按照以下代码进行操作,
@RequestMapping(value={"","/"}, method=RequestMethod.GET)
public HashMap<Long, Editor> getAllEditor(){
return Application.editors;
}
以上将接受,
1)localhost:8080 / editors
2)localhost:8080 / editors /
希望这会有所帮助。
答案 1 :(得分:-1)
你能不能尝试在value中添加一个动作内容。这里只指定一个“/”。喜欢
@RequestMapping(value="/updateEditor", method=RequestMethod.GET)
如果您需要添加任何路径变量,可以使用以下命令修改
@RequestMapping(value="/updateEditor/{editorid}", method=RequestMethod.PUT)
也尝试这种方法。