无法发现端点网址

时间:2018-05-20 20:55:24

标签: java spring-boot

所以今天我开始使用spring-boot,我的意思是用spring-boot创建一个rest api。

我创建了一个带有休息控制器和简单模型的小项目。我试图从其他控制器调用该方法(没有成功)

控制器:

@RestController

    public class RestController {

            @RequestMapping(method = RequestMethod.GET, 
                            produces = MediaType.APPLICATION_JSON_VALUE,
                            value = "/something")
            public @ResponseBody Something getSomething(){
                Something s = new Something ();
                return s;
            }
    }

主:

@SpringBootApplication
public class SpringBootRestExampleApplication 

    public static void main(String[] args) {
        SpringApplication.run(SpringBootRestExampleApplication.class, args);
    }
}

应用程序属性:

server.port=8081
spring.data.rest.basePath=/micro

所以如果我有一个basePath / port和一个映射..通常我只需要使用localhost:8081 / micro / something。但是,由于唯一的原因,当我使用API​​客户端时,我找不到404端点/东西。如果缺少某些东西,任何人都可以指出我(错过一些声明/..)?

我从堆栈中读过其他帖子我尝试使用(例如)RequestMappingHandlerMapping

注意:项目使用tomcat 8运行。我已经尝试过localhost:8081 / something; localhost:8081 / micro等;在其余控制器上添加了一些urlmapping注释

3 个答案:

答案 0 :(得分:2)

根据文件:

  

spring.data.rest.base-path = #Spring Data REST使用的基本路径   公开存储库资源。

尝试使用base-path代替basePath

spring.data.rest.base-path=/micro

或者尝试将dispatcherServlet路径设置为:

server.contextPath=/micro

对于SpringBoot 2.0 +:

server.servlet.context-path=/micro

搜索日志:

o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [$URL]
s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/root/test],methods=[GET]}" onto public java.lang.String com.test.Rest.getSomething()

答案 1 :(得分:1)

spring.data.rest.base-path 不起作用,因为它专门用于spring数据休息。你可以查看这张票

https://github.com/spring-projects/spring-boot/issues/7816

作为一种解决方法,您可以使用@ oleg.cherednik建议的内容或升级到spring boot 2.0并使用此

server.servlet.context-path=/micro

答案 2 :(得分:0)

我建议不要使用server.contextPathspring.data.rest.base-path。我面对着不同的行为。

声明一个包含API所有路径的类:

public static final class RequestPath {
    public static final String BASE = "/micro";

    public static final String SOMETHING = BASE + "/something";
}

在控制器中使用它:

@RestController
public class RestController {
    @RequestMapping(value = RequestPath.SOMETHING)
    @ResponseBody
    public Something getSomething() {}
}

最后得到的结果:

  1. 一个文件中的所有路径。这可能有助于同时看到它
  2. 文档(如果您不使用Swagger或Raml)
  3. 您不关心base path设置,这可能会有所不同(+您肯定知道到所需端点的正确请求路径)。