此 Spring-boot 项目与 Angular 4 集成。输入网址时,我可以访问主页>> localhost:8080
。
我输入 whitelabel错误页面,当输入任何不同的url添加参数时,如: / login,/ signup 。
出现意外错误(type = Not Found,status = 404)。
我可以使用 angular-routing 在网站上访问这些网页(localhost:8080/signup
,localhost:8080/foo
,..)。所以问题是只能直接击中网址。
那么如何解决这个问题,任何检查的想法都会有所帮助。
注意:服务器端没有这些网址的授权。
编辑:添加了index.html路径。
src/main/resources
static
assets
index.html
bundle
bundle
..
routing.ts
export const routes: Routes = [
{
path: '',
component: HomeComponent,
pathMatch: 'full'
},
{
path:'signup',
component: SignupComponent,
canActivate: [GuestGuard],
pathMatch:'full'
},
答案 0 :(得分:1)
创建一个控制器并将每个请求转发到index.html,如下所示,
sendRequest(method: string, url: string, data: any) : Observable<any>{
return this.http.request(method, url, {
body: data,
headers: {
'Accept': 'application/json, text/plain, */*',
'Authorization': 'bearer ' + token,
'Content-Type': 'application/json;charset=UTF-8'
}
}).map( ( res ) => {
return res || {};
} )
.catch( this.handleError );
}
handleError(response: any) {
if (response.status === 401 || response.status === 403) {
this.tokenService.deleteToken();
this.router.navigate(['login']);
}
// Show popup etc.
...
}
通过执行此操作,angular将拾取URL并导航到相应的页面。另外,请根据需要修改请求网址。每当从浏览器直接命中一个请求时,它将通过弹簧启动来启动,并且弹簧启动不知道角度路由URL。为防止这种情况,我们需要将所有请求转发给index.html。
或者您可以使用HashLocationStrategy作为@Vikas建议
答案 1 :(得分:1)
我直接实现了这个WebMvcConfigurer
,它对我来说很有效。这是参考link。
import java.io.IOException;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.resource.PathResourceResolver;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**/*")
.addResourceLocations("classpath:/static/")
.resourceChain(true)
.addResolver(new PathResourceResolver() {
@Override
protected Resource getResource(String resourcePath,
Resource location) throws IOException {
Resource requestedResource = location.createRelative(resourcePath);
return requestedResource.exists() && requestedResource.isReadable() ? requestedResource
: new ClassPathResource("/static/index.html");
}
});
}
}