当前位置: 首页 > 知识库问答 >
问题:

SPA和Spring boot-serve index.html用于非API请求

宰修能
2023-03-14

所有api调用都应使用前缀为/api的url,并应由REST控制器处理。

所有其他URL应该只提供index.html文件。我如何用Spring实现这一点?

共有1个答案

郑卜鹰
2023-03-14

实现您想要的最简单的方法是实现自定义404处理程序。

将这些参数添加到应用程序中。properties:

spring.resources.add-mappings=false
spring.mvc.throw-exception-if-no-handler-found=true

第一个属性删除所有默认的静态资源处理,第二个属性禁用Spring默认的whitelabel页面(默认情况下Spring捕获NoHandlerFoundException并提供标准的whitelabel页面)

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.NoHandlerFoundException;
import javax.servlet.http.HttpServletRequest;

@ControllerAdvice
public class PageNotFoundController {
    @ExceptionHandler(NoHandlerFoundException.class)
    public String handleError404() {
            return "redirect:/index.html";
    }
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/index.html").addResourceLocations("classpath:/static/index.html");
        super.addResourceHandlers(registry);
    }

    @Bean
    public ViewResolver viewResolver() {
        UrlBasedViewResolver viewResolver = new UrlBasedViewResolver();
        viewResolver.setViewClass(InternalResourceView.class);
        return viewResolver;
    }

}
 类似资料:
  • 我有在openshift中运行的springboot和非springboot(Eclipse Microprofile)Rest API。两者都有服务endpoint端口9443 SpringBoot度量路径-/actuator/Prometheus Eclipse micro profile度量路径/度量 Eclipse微配置文件抓取配置 Spring靴刮擦配置 由于MP指标在springboo

  • 从我的后端应用程序(springboot,java8)中,我将进行多个外部api调用。我需要将所有请求和响应数据(包括头、请求和响应体)记录到数据库(MongoDB)中。 下面是我的示例代码,这是我如何尝试捕获每个外部api调用的请求和响应。在异常情况下,我将存储状态为“失败”。 在我的项目中,将在新的第三方api集成上添加多个模块,因此在每个模块中,对于每个不同的外部api调用,我必须捕获所有这

  • 我有一个API服务器(资源服务器)和多个应用程序、Web GUI(SPA)和一个桌面客户端,也许还会有更多。除了超文本传输协议之外,我还想为我的API服务器使用openid-connect基本身份验证。应该可以配置使用哪个openid提供商。我自己的,facebook,google...我只想做身份验证,我不需要他们的API。我只需要一些个人资料数据,如电子邮件或名字。 比方说,我已经将googl

  • Regan_API_SpringBoot 项目介绍 Regan_API_SpringBoot 文档项目 Regan API 项目是基于注释自动生成api文档,很大缩短了开始与后期维护API接口文档的时间。Regan API 利用jdk提供的Doclet 类读取文档注释,可手动配置需要读取的文件,同时增加了读取过滤指定方法过滤等功能。 文档: https://zhangbiy.github.io/r

  • 当我试图通过邮递员发送时,我有一个请求正在正常工作。我试图实现相同的使用代码,我面临一个错误。 我正在使用的代码- 我得到的错误是- org.springframework.web.client.HttpClientErr异常$未授权: 401未授权 但《邮递员》中同样的作品也有同样的细节。 我想说明一下 后端API不在我手里。 clientid,clientSecret,access_token

  • 我使用角应用程序的应用程序代码授予角。 Issue1-刷新令牌在接下来的2天内无效,即使签名已扩展,如何在接下来的30天内扩展访问令牌? 问题2-查看该文档 “解析demo.docusign.net/restapi/v2.1/accounts/…”名称:“HttpErrorResponse”确定:错误状态:200状态文本:“确定”url:“demo.docusign.net/restapi/v2.