所以今天我开始使用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注释
答案 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.contextPath
或spring.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() {}
}
最后得到的结果:
base path
设置,这可能会有所不同(+您肯定知道到所需端点的正确请求路径)。