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

Spring Boot Angular——在地址栏中输入Url将导致404

郗唯
2023-03-14

需要基础知识方面的帮助-我集成了角形和Spring靴。我制作了Angular应用程序的生产版本,并复制了Spring boot静态资源文件夹中的6个文件。

默认情况下,当我点击localhost:8080索引时。html呈现为Spring boot自动将其注册为欢迎页面。

现在,当我在角内,我可以通过角路由器导航到不同的组件,网址也在变化。

但当我复制同一个URL,例如localhost:8080/myTask,并在URL地址栏中输入它时,它抛出404 resource not found。因为它首先命中Spring控制器,而且没有映射,所以失败了。

共有3个答案

徐博雅
2023-03-14

如果您不使用Spring MVC(例如,您使用的是Jersey),您也可以通过使用javax来解决这个问题。servlet。过滤器:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class AngularRoutingFilter implements Filter {

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpServletRequest = ((HttpServletRequest) request);
    String requestURI = httpServletRequest.getRequestURI();

    if (shouldDispatch(requestURI)) {
        request.getRequestDispatcher("/").forward(request, response);
    } else {
        chain.doFilter(request, response);
    }
  }

  @Override
  public void init(FilterConfig filterConfig) {}

  @Override
  public void destroy() {}

  private boolean shouldDispatch(String requestURI) {
    /* Exclude/Inlclude URLs here */
    return !(requestURI.startsWith("/api") || requestURI.equals("/"));
  }

}
曾河
2023-03-14
// the perfect solution(from jhipster)
@Controller
public class ClientForwardController {
    @GetMapping(value = "/**/{path:[^\\.]*}")
    public String forward() {
        return "forward:/";
    }
}
陶锋
2023-03-14

在Spring Boot中扩展了WebMVCConfigureAdapter的类中,在addViewControllers方法内部,应该执行以下操作

@Override
    public void addViewControllers(final ViewControllerRegistry registry) {
        super.addViewControllers(registry);
      registry.addViewController("/myTask").setViewName("forward:/");
 }

对于转发、所有请求,您可以执行注册表。addViewController(“/**”)。setViewName(“转发:/”

更新感谢乔纳斯的建议。由于WebMVCConfigureAdapter在Spring 5.0中被弃用,您可以通过扩展WebMVCConfiguer来实现上述逻辑

 类似资料:
  • 输入地址(URL) 1. 开启选单后,使用方向按钮选择地址列,并按下按钮。 2. 使用键盘输入欲显示之Web网页的地址后,选择[确定]并执行决定。 提示 亦可从选单列中选择[档案] > [输入地址],进行同样操作。 将输入模式变更为支持Web输入后,可简单输入[http://]、[.com]等常用文字。又,选择[履历]后,将会显示之前输入的地址。按下SELECT(选择)按钮,可更换输入模式。

  • import { Address } from 'feui'; import ChinaAddressV3 from 'feui/packages/utils/mock/china_address_v3.json' components: { [Address.name]: Address }, data () { return { value: [], a

  • import { Actionsheet } from 'feui'; components: { [Actionsheet.name]: Actionsheet } data() { return { show1: false, show2: false, show3: false, show4: false, headerSlot: ti

  • 本文向大家介绍在浏览器中输入url地址到显示页面的过程?相关面试题,主要包含被问及在浏览器中输入url地址到显示页面的过程?时的应答技巧和注意事项,需要的朋友参考一下 百度好像最喜欢问这个问题。 打开一个网页,整个过程会使用哪些协议 图解(图片来源:《图解HTTP》): 总体来说分为以下几个过程: DNS解析 TCP连接 发送HTTP请求 服务器处理请求并返回HTTP报文 浏览器解析渲染页面 连接

  • cPanel地址导入程序可用于在您的帐户中创建多个电子邮件地址或转发器。 例如,您的办公室中有100名员工,您希望每位员工都有一个电子邮件地址,如果您有员工的电子邮件地址列表,则只需两次点击,您就可以根据需要创建尽可能多的电子邮件帐户。 cPanel地址导入器支持两种类型的数据导入, Excel Spreadsheet (.xls)或Comma separated value sheet (.cs

  • 本文向大家介绍在地址栏里输入一个URL,到这个页面呈现出来,中间会发生什么?相关面试题,主要包含被问及在地址栏里输入一个URL,到这个页面呈现出来,中间会发生什么?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 这是一个必考的面试问题, 输入url后,首先需要找到这个url域名的服务器ip,为了寻找这个ip,浏览器首先会寻找缓存,查看缓存中是否有记录,缓存的查找记录为:浏览器缓存-》系统缓