使用@RepositoryRestController 注释的 Spring Data 控制器将使用 application.properties中的环境变量 spring.data.rest.base-path来公开一个存储库作为静止端点。但是普通的 @RestController不会考虑这一点。根据 弹簧数据休止文档,有一个注释 @BasePathAwareController,您可以使用它。但是,当我尝试保护这样一个控制器时,在与 Spring 安全性相关的方面确实存在问题。现在已经找不到了。
另一个变通方法是一个简单的技巧。不能在注释中给静态 String 加前缀,但是可以使用如下表达式:
@RestController
public class PingController {
/**
* Simple is alive test
* @return <pre>{"Hello":"World"}</pre>
*/
@RequestMapping("${spring.data.rest.base-path}/_ping")
public String isAlive() {
return "{\"Hello\":\"World\"}";
}
}
这个函数设置 Web servlet 上的上下文路径。这个属性在 Spring mvc 和 spring data rest 项目中都可以很好地工作。不同之处在于请求 URL 在到达弹簧拦截器之前会被过滤掉。因此,如果请求不好,它将使用 HTML 进行响应。没有定义 Spring 或您自己的定制 JSON 响应(在@ResponseBodyAdvisory 注释类中)。为了克服这个问题,您应该使用下面的属性。
路径属性
spring.mvc.servlet.path=/api
这将在 Spring mvc 拦截器中过滤请求 URL,并在调用错误请求时响应 default/自定义 JSON 响应。
结论:
因此,作为 OP 的问题,我建议他应该使用 Spring.mvc.servlet.path来更改上下文路径。