i hv an application which always return jsp file as a view from spring controller. shown below :
@RequestMapping("/home")
public class HomeController {
@RequestMapping(value = "", method = RequestMethod.GET)
public ModelAndView home(HttpServletResponse response){
ModelAndView modelView = new ModelAndView("home")
return modelView;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/content/**").addResourceLocations("WEB-INF/content/");
}
@Bean
public InternalResourceViewResolver setupViewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
but now in place of home.jsp i have to return index.html for this particular mapping. the html file is located in a different folder not in /WEB-INF/views/ but in user/src .
i've tried using something like this , setting the order of view resolvers , i hv seen this code somewhere on internet , which checks if the file is exist in the path or not. but it did not work for me .
it always trying to find the index in WEB-INF/views/ and failed so.
@Bean
public ViewResolver htmlViewResolver() {
UrlBasedViewResolver resolver = new ChainableUrlBasedViewResolver();
resolver.setPrefix("/client/src/");
resolver.setSuffix(".html");
resolver.setOrder(0);
return resolver;
}
@Bean
public InternalResourceViewResolver setupViewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
viewResolver.setOrder(1);
return viewResolver;
}
public class ChainableUrlBasedViewResolver extends UrlBasedViewResolver {
public ChainableUrlBasedViewResolver() {
setViewClass(InternalResourceView.class);
}
@Override
protected AbstractUrlBasedView buildView(String viewName) throws Exception {
String url = getPrefix() + viewName + getSuffix();
InputStream stream = getServletContext().getResourceAsStream(url);
if (stream == null) {
return new NonExistentView();
}
return super.buildView(viewName);
}
private static class NonExistentView extends AbstractUrlBasedView {
@Override
protected boolean isUrlRequired() {
return false;
}
@Override
public boolean checkResource(Locale locale) throws Exception {
return false;
}
@Override
protected void renderMergedOutputModel(Map<String, Object> model,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
// Purposely empty, it should never get called
}
}
}
any idea how to do this using Spring.