我正在构建一个RESTful API并拥有一个Spring REST Controller(@RestController)和一个基于注释的配置。我想让我的项目的welcome文件是带有API文档的.html或.jsp文件。
在其他Web项目中,我会在我的web.xml中放置一个welcome-file-list,但是在这个特定的项目中我似乎无法使它工作(最好使用Java和注释)。
这是我的WebApplicationInitializer
public class WebAppInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(ApplicationConfig.class);
context.setServletContext(servletContext);
ServletRegistration.Dynamic dynamic = servletContext.addServlet("dispatcher",
new DispatcherServlet(context));
dynamic.addMapping("/");
dynamic.setLoadOnStartup(1);
}
}
这是我的WebMvcConfigurerAdapter
@Configuration
@ComponentScan("controller")
@EnableWebMvc
public class ApplicationConfig extends WebMvcConfigurerAdapter {
@Bean
public Application application() {
return new Application("Memory");
}
}
这只是我的REST控制器的一小部分
@RestController
@RequestMapping("/categories")
public class CategoryRestController {
@Autowired
Application application;
@RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Map<Integer, Category>> getCategories(){
if(application.getCategories().isEmpty()) {
return new ResponseEntity<Map<Integer, Category>>(HttpStatus.NO_CONTENT);
}
return new ResponseEntity<Map<Integer, Category>>(application.getCategories(), HttpStatus.OK);
}
}
到目前为止,我已经尝试过:
<welcome-file-list>
和<welcome-file>
的web.xml。 (那里没有运气)@RequestMapping("/categories")
从类级别移至所有方法,并添加@RequestMapping("/")
的新方法,该方法返回String
或{{1}使用视图名称。 (前者刚刚返回一个带有String的空白页面,后者没有找到映射)ModelAndView
是“/ index”,并结合<welcome-file>
返回@RequestMapping(value="/index")
和一个{ {1}}在我的配置类中。 (返回new ModelAndView("index")
,即使“/ index”已成功映射。手动将“/ index”添加到URL成功将其解析为index.jsp)答案 0 :(得分:1)
指定控制器来处理索引页时,您应使用@Controller
而不是@RestController
。虽然@RestController
是@Controller
,但它不会解析为视图,但会将结果返回给客户端。在返回@Controller
时使用String
时,它将解析为视图的名称。
@Controller
public class IndexController {
@RequestMapping("/")
public String index() {
return "index";
}
}
然而,有一种更简单的方法来配置它,你不需要一个控制器。配置视图控制器。在配置类中,只需覆盖/实现addViewControllers
方法。
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
}
这样你甚至不需要为它创建一个类。