Как обслуживать sitemap.xml из внешней папки проекта в Spring Boot 2 - PullRequest
0 голосов
/ 02 октября 2019

У меня есть Spring Boot 2 Web application, который является веб-сайтом для блогов, где у меня есть динамический sitemap.xml файл. sitemap.xml обновляется всякий раз, когда мы добавляем новую статью в хранилище. Теперь мне нужно подать файл sitemap.xml извне места расположения проекта. Предположим, что sitemap.xml присутствует в следующем месте:

/home/admin/sitemap.xml

Мое требование: всякий раз, когда пользователь нажимает URL-адрес https://<my_url>/sitemap.xml, файл должен обслуживаться из указанного места. Я добавил сопоставление для того же.

@Configuration
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class WebConfiguration implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/sitemap.xml/**").addResourceLocations("/home/admin/sitemap.xml");
    }
}

Но код не работает. Может кто-нибудь подсказать, что я тут не так делаю.

1 Ответ

0 голосов
/ 03 октября 2019

Наконец, я решил это, написав GetMapping. Многие решения в Интернете говорят, что возвращать файл sitemap.xml как String. Но учтите, Google не будет читать этот файл sitemap.xml из-за неправильного заголовка Content-Type. Content-Type должно быть "application/xml". Ниже приводится мой @GetMapping

 @GetMapping(value = "/sitemap.xml")
    public void serveSiteMapFile(HttpServletResponse response) throws IOException {

        response.setContentType("application/xml");
        try (BufferedReader bufferedReader = 
                new BufferedReader(new FileReader(new File("/home/admin/sitemap.xml")))) {
            String line;
            StringBuilder siteMapBuilder = new StringBuilder();
            while ((line = bufferedReader.readLine()) != null) {
                siteMapBuilder.append(line);
            }
            ServletOutputStream outStream = response.getOutputStream();
            outStream.println(siteMapBuilder.toString());
            outStream.flush();
            outStream.close();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...