- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
是否有任何配置选项只允许更改 rest Controller 的基本 url,例如,如果我的 api 的基本 url 是 www.example.com/user/{id} 变成 www.example.com/rest/user/{ id} ?
我正在使用 spring boot v1.3.2
我尝试创建自定义注解,它通过添加 RequestMapping 来扩展 RestController。这是示例,但它不起作用。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@RestController
@RequestMapping(value = "/rest", path = "/rest")
public @interface MyRestController { }
最佳答案
创建一个声明基本 URL 的自定义注释并使用它代替 @RestController。
CustomRestControllerAnnotation.java
package com.example.stackoverflow.config;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@RestController
@RequestMapping("/rest")
public @interface CustomRestControllerAnnotation {}
FirstRestController.java
package com.example.stackoverflow.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.stackoverflow.config.CustomRestControllerAnnotation;
@CustomRestControllerAnnotation
public class FirstRestController {
@RequestMapping("/first")
public String firstMethod(){
return "First Controller";
}
}
SecondRestController.java
package com.example.stackoverflow.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.stackoverflow.config.CustomRestControllerAnnotation;
@CustomRestControllerAnnotation
public class SecondRestController {
@RequestMapping("/second")
public String secondMethod(){
return "Second Controller";
}
}
通过创建一个基本 Controller 作为所有实际 Controller 的模板,您可以从一个位置有效地管理根 URL。
BaseRestController.java
package com.example.stackoverflow.controller;
import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping("/rest")
public class BaseRestController {}
然后您只需为所有实际 Controller 扩展此类。
FirstRestController.java
package com.example.stackoverflow.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class FirstRestController extends BaseRestController{
@RequestMapping("/first")
public String firstMethod(){
return "First Controller";
}
}
SecondRestController.java
package com.example.stackoverflow.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SecondRestController extends BaseRestController{
@RequestMapping("/second")
public String secondMethod(){
return "Second Controller";
}
}
如果您的 Controller 从存储库提供数据,那么 Spring Data REST 可以去掉大部分样板并解决您最初的问题。
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
通过声明此依赖关系,您的所有存储库都会自动启用 REST。
您可以使用属性文件控制基本 URL。
application.properties
spring.data.rest.basePath=/rest
关于java - 如何仅为休息 Controller 更改基本网址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38212691/
我是一名优秀的程序员,十分优秀!