我正在构建一个RESTful API,并且有一个Spring REST控制器(@RestController)和一个基于注解的配置。我希望我的项目的欢迎文件是一个.html或.jsp文件,其中包含API文档。
在其他Web项目中,我会在web.xml中放置一个welcome-file-list,但在这个特定的项目中,我似乎无法让它工作(最好使用Java和注解)。
这是我的Web应用程序初始化程序
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。(没有成功) - 将Controller中的
@RequestMapping("/categories")
从类级别移到所有方法中,并添加一个新的方法@RequestMapping("/")
,该方法返回一个String
或一个ModelAndView
(前者只返回一个带有String的空白页,对于后者,找不到Map) - 如建议here:两者的组合,其中我的web.xml
<welcome-file>
是“/index”,与@RequestMapping(value="/index")
组合返回new ModelAndView("index")
,并且在我的配置类中返回ViewResolver
。(返回Warning: No mapping found in DispatcherServlet with name 'dispatcher'
,即使“/index”已成功Map。手动将“/index”添加到URL可成功将其解析为index.jsp)
1条答案
按热度按时间polhcujo1#
指定控制器来处理索引页时,应使用
@Controller
,而不是@RestController
。虽然@RestController
是@Controller
,但它不会解析为视图,而是将结果原样返回给客户端。使用@Controller
时,如果返回String
,它将解析为视图的名称。然而有一种更简单的方法来配置它,你不需要一个控制器。配置一个视图控制器。在你的配置类中,简单地覆盖/实现
addViewControllers
方法。这样,您甚至不需要为它创建类。