gpt4 book ai didi

java - 如何仅为休息 Controller 更改基本网址?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:22 27 4
gpt4 key购买 nike

是否有任何配置选项只允许更改 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 { }

最佳答案

选项 1:自定义注释

创建一个声明基本 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";
}
}

选项 2:基础 RestController

通过创建一个基本 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";
}
}

选项 3:Spring Data REST

如果您的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com