Я создаю приложение Vue.JS & Spring Boot, которое запускаю через докер-контейнер.Папка dist для Vue копируется в ресурсный / публичный путь и обслуживается службой Spring Boot.
Я настроил маршруты с помощью маршрутизатора vue, но все эти маршруты возвращают 404 - Not found
при вводе непосредственно в браузер (но работают нормально при доступе через приложение Vue).
Маршрутизатор vue:
export default new Router({
mode: 'history',
routes: [{
path: '/',
name: 'home',
component: Home
},
{
path: '/result',
name: 'result',
component: Result,
props: true
},
{
path: '/result/:userid',
name: 'autoResult',
component: Result,
props: true
}
]
})
Мне нужен / result / userid, чтобы не возвращать 404 - вместо этого получите идентификатор пользователя и отобразите страницу результатов.Это возможно, чтобы добраться до работы?
Еще одна вещь, которую я хочу сделать, - это перенаправить все 404 страницы, которые не сопоставлены с любой страницей API / VUE, чтобы вернуться на стартовую страницу.Я попытался использовать загрузочную пружину implements ErrorController
, но я не могу заставить работать редирект.
Редактировать:
Я попытался добавить следующий совет контроллера:
@ControllerAdvice
public class WebConfig {
@ExceptionHandler(NoHandlerFoundException.class)
public String renderDefaultPage(NoHandlerFoundException e) {
return "classpath:public/index.html";
}
}
И следующие свойства:
spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:public/static/
Но когда я пытаюсьполучить доступ к главной странице сейчас (или любой другой URL) я получаю stackOverflowException
и сервер начинает выполнять бесконечный цикл, говоря это:
2019-03-05 13:26:24.298 WARN 22044 --- [nio-8080-exec-1] o.s.web.servlet.PageNotFound : No mapping for GET /classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/classpath:public/index.html