404正确映射SpringBoot RestController

时间:2017-10-06 10:57:04

标签: spring rest spring-boot controller

我正在经历一个浪费我大量时间的小问题......

出于演示目的,我使用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也是如此。 有任何关于这个问题的原因的想法? 谢谢。

2 个答案:

答案 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)

也尝试这种方法。