设置 Spring REST 控制器欢迎文件

Set a Spring REST Controller welcome-file

我正在构建一个 RESTful API 并有一个 Spring REST 控制器 (@RestController) 和一个基于注解的配置。我希望我的项目的欢迎文件是带有 API 文档的 .html 或 .jsp 文件。

在其他网络项目中,我会在我的 web.xml 中放置一个欢迎文件列表,但在这个特定项目中,我似乎无法让它工作(最好使用 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);
    }

}

到目前为止我已经尝试过:

在指定控制器来处理您的索引页面时,您应该使用 @Controller 而不是 @RestController。尽管 @RestController 是一个 @Controller,但它不会解析为视图,但 returns 结果与客户端的一样。在返回 String 时使用 @Controller 时,它将解析为视图的名称。

@Controller
public class IndexController {

    @RequestMapping("/")
    public String index() {
        return "index";
    }
}

不过,有一种更简单的配置方法,您不需要控制器。配置视图控制器。在您的配置中 class 只需 override/implement addViewControllers 方法。

public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("index");
}

这样你甚至不需要为它创建 class。