Spring如何为其他来源的静态文件添加资源处理程序

时间:2020-09-23 11:25:33

标签: java spring spring-boot spring-mvc

我正在尝试在Spring + Angular项目中实现对静态资源的处理请求。当Spring应用程序在http://localhost:4200上运行时,Angular应用程序将在http://localhost:8080上运行。

因此,当我需要获取图像时,angular发送一个看起来像http://localhost:4200/screenShots/image-name.jpg的请求。为了处理此类请求,我创建了WebConfig类:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        String path = "file:///" + *path to folder with images on my PC*
        registry.addResourceHandler("/screenShots/**")
                .addResourceLocations(path);
    }
}

它不起作用,我收到 404(未找到)错误。我已经尝试过addind并删除@EnableWebMvc@CrossOrigin批注,试图在类中添加addCorsMappings()方法,没有任何帮助。

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/screenShots/**")
                .allowedOrigins("http://localhost:4200");
    }

但是,当我在Google地址栏中输入http://localhost:8080/screenShots/image-name.jpg (从:4200更改为:8080)字符串时,它会按预期返回我的图片,所以我想知道是否可以添加资源处理程序的某种@CrossOrigin注释替代方法,因为我在Internet上尚未找到任何解决方案。谢谢!

Github仓库供那些好奇的人使用:https://github.com/Vladyslav-Bahlai/OktenGames

P.S。我已经解决了我的问题,不用费心编写您的解决方案,反正没人在乎,UWU

1 个答案:

答案 0 :(得分:0)

例如,我将显示我的MVC-配置。我有同样的问题。 Spring没有看到HTML文件。我请您注意 templates 文件夹。

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    /**
     * Making our pages visible
     *
     * @param registry
     */
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/login").setViewName("login");
        registry.addViewController("/coffees").setViewName("coffees");
        registry.addViewController("/teas").setViewName("teas");
        registry.addViewController("/contacts").setViewName("contacts");
        registry.addViewController("/home").setViewName("home");
        registry.addViewController("/about").setViewName("about");
        registry.addViewController("/registration").setViewName("registration");
        registry.addViewController("/card").setViewName("card");
    }


    /**
     * This method helps Spring discover file paths
     *
     * @param registry
     */
    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {

        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");

        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/templates/");
    }
}