Попытка подать статический контент из моего приложения SpringBoot, но это не удается - PullRequest
0 голосов
/ 12 октября 2019

Я хочу обслуживать статические файлы из моего приложения SpringBoot. У меня есть очень простой контроллер, который я хотел бы выполнить:

@EnableWebMvc
@RestController
public class MyRestController implements WebMvcConfigurer {

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

   @PostMapping(path = "/hello")
   public MyResponse hello(@RequestBody() MyBody body,
                         HttpServletRequest request) {
       return new MyResponse("Hello " + request.getRemoteAddr());
   }
}

Мой файл index.html находится в папке static :

MyApp/
   src/
      main/
         static/index.html
         static/img/image.png

Когда ясделать запрос GET с curl на http://localhost:8080, в ответ я получаю код ответа 404 и сервер сообщает No mapping for GET /. Я ожидаю, что файл index.html возвращается.

Отправка запроса POST на http://localhost:8080/hello с объектом MyBody в виде тела json работает!

Что я сделал не так?

Я прочитал это blogpost с сайта Spring, но с тех пор, как этот пост был опубликован в 2013 году, он кажется довольно тихим. Может, сегодня он работает иначе?

Ответы [ 4 ]

3 голосов
/ 12 октября 2019

Это упомянуто в Spring Boot Документация , в разделе Spring mvc вы можете использовать WebMvcConfigurer, но вам не нужно делать @ EnableWebMvc

Поэтому вы должны удалить @EnableWebMvcаннотация!

//@EnableWebMvc Remove this
@RestController
public class MyRestController implements WebMvcConfigurer {

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

   @PostMapping(path = "/hello")
   public MyResponse hello(@RequestBody() MyBody body,
                         HttpServletRequest request) {
       return new MyResponse("Hello " + request.getRemoteAddr());
   }
}
1 голос
/ 12 октября 2019

Я думаю, что вам не хватает папки resources , структура вашей папки должна выглядеть как

MyApp/
    src/
      main/
        resources/
          static/index.html
          static/img/image.png
1 голос
/ 12 октября 2019

Вы не должны использовать EnableWebMvc в Spring Boot. См. документацию

1 голос
/ 12 октября 2019

Статические ресурсы обычно идут в / src / main / resources, чтобы попасть на путь к классам в стандартном макете проекта maven, и Spring Boot должен обслуживать все файлы в / static (/ src / main / resources / static) без каких-либо addResourceHandler() конфигурация приложения.

https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

...