当前位置: 首页 > 面试题库 >

如何在Spring Boot中为所有控制器指定前缀?

宓跃
2023-03-14
问题内容

我有控制器映射/user/order

@RestController
@RequestMapping("/users")
public class UserController {
    ...
}

@RestController
@RequestMapping("/orders")
public class OrderController {
    ...
}

我想分别通过URL http://localhost:8080/api/users 和访问这些URL
http://localhost:8080/api/orders

如何在Spring Boot中实现这一目标?


问题答案:

您可以/api/*在自定义配置中提供到Spring Boot应用程序的根上下文路径的映射。

import org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration;
import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;

@Configuration
public class DispatcherServletCustomConfiguration {

    @Bean
    public DispatcherServlet dispatcherServlet() {
        return new DispatcherServlet();
    }

    @Bean
    public ServletRegistrationBean dispatcherServletRegistration() {
        ServletRegistrationBean registration = new ServletRegistrationBean(
                dispatcherServlet(), "/api/");
        registration.setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
        return registration;
    }
}

或将此添加到您的application.propertiesin src\main\resources文件夹中

server.contextPath=/api/*

编辑

从Spring Boot 2.x开始,该属性已被弃用,应替换为

server.servlet.contextPath=/api/*

您可以在此处找到更多的内容Spring Boot Context
Root,
并在此处将servlet映射添加到DispatcherServlet



 类似资料:
  • 我想通过URL分别访问和。 如何在Spring Boot中实现这一点?

  • 在一个项目中,当我将代码切换到主分支时,我开始发现一些错误。其中之一是加载异常错误。整个日志还显示了一个No Suck method异常错误。 我也想发布控制器,但因为它超过600行,我不确定这是否有帮助,我已经确保控制器中的每个方法都是公共的,唯一的私有部分是我使用的变量和图表。

  • 在spring boot中@RequestBody内容到达控制器之前,我如何覆盖它? > 此外,我还搜索了Request estBodyAdviceAdapter。 有几个链接对spring boot不起作用。 如何多次读取request.getInputStream() 如何在Spring引导到达控制器之前修改请求正文 现在,我可以将输入流读入字符串中,进行一些修改并设置回控制器的输入流吗?

  • 我试图找到它,但我发现了很多不同的场景,但没有这一个。 我想做的是在com.myproject.api下的控制器中的所有路由中添加“/api/”前缀。我希望com.myapp.api包下的所有控制器使用“/api/*”,而com.myapp.web包下的所有控制器不使用前缀 用Spring/Spring靴可以吗?

  • 问题内容: 我知道您可以设置in 来更改根上下文。 另外,我可以在Spring Boot的应用程序配置中添加一个附加上下文,如以下示例(在Groovy中),以便在根上下文的URL映射中添加“ / api”: 我正在尝试为Web服务调用专门准备一个单独的基本URI“ / api”,我可以利用它来提高安全性,等等。但是,使用上述方法将意味着可以通过以下方式访问我的任何URI(无论是否为Web服务) “

  • 问题内容: 为了提供一些运行时生成的API文档,我想遍历所有Spring MVC控制器。所有控制器都使用Spring @Controller注释进行注释。目前我是这样的: 但是这个代码的第一个电话是EXTREMELY缓慢。我想知道Spring是否迭代类路径中的所有类,而不是仅检查定义的bean。运行上述代码时,控制器已经加载,日志显示了所有控制器及其请求映射,因此Spring MVC必须已经了解所