2016-05-01 12 views
0

私はRESTful APIを構築しており、Spring RESTコントローラ(@RestController)とアノテーションベースの設定を持っています。私は自分のプロジェクトのウェルカムファイルをAPIドキュメントと共に.htmlまたは.jspファイルにしたいと思っています。Spring REST Controllerウェルカムファイルを設定する

他のWebプロジェクトでは、私はweb.xmlにwelcome-file-listを配置しますが、この特定のプロジェクトでは、(Javaと注釈を使用することをお勧めします)

これは、これは私の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); 
    } 

} 

のごく一部である私の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); 
    } 
} 

次のとおりです。

  • <welcome-file-list><welcome-file>のweb.xmlを追加するだけです。
  • コントローラ内の@RequestMapping("/categories")をクラスレベルからすべてのメソッドに移動し、@RequestMapping("/")という新しいメソッドを追加すると、StringまたはModelAndViewのビュー名が返されます。私のweb.xml <welcome-file>@RequestMapping(value="/index")を返すと組み合わせる「/インデックス」、である両方の組み合わせを、:
  • としてはhereを示唆した(後者のマッピングが見つかりませんでしため前者はちょうど、文字列で空白のページが返されます) new ModelAndView("index")、およびViewResolverを設定クラスに追加します。 (「/インデックスは、」成功したマッピングされているにもかかわらず、Warning: No mapping found in DispatcherServlet with name 'dispatcher'を返します。手動でURLに「/インデックス」を追加すると、正常のindex.jspにそれを解決)
+0

インデックスコントローラの場合、@ RestControllerは使用せず、@コントローラのみを使用します。それ以外の場合は、あなたの記述*が空白のページを返すばかりの動作を得る* ... –

答えて

0

を使用する必要があり、あなたのインデックスページを処理するためのコントローラを指定する場合a @Controllerではなく、@RestControllerです。 @RestController@Controllerですが、ビューには解決されませんが、その結果はそのままクライアントに返されます。 Stringを返すときに@Controllerを使用すると、ビューの名前に解決されます。

@Controller 
public class IndexController { 

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

しかし、これを設定するのは簡単な方法ですが、コントローラを必要としません。 View Controllerを設定します。あなたの設定クラスでは、単にaddViewControllersメソッドをオーバーライド/実装します。

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

このようにして、クラスを作成する必要はありません。

+0

これは美しく動作します。どうもありがとうございます! – Joris

+0

この設定では、WEB-INF内のJSPからWEB-INF以外のスタイルシートにどのようにアクセスできますか?私は '../css/ stylesheet.css'と' $ {pageContext.request.contextPath}/css/stylesheet.css'を 'c:url'タグの有無にかかわらず試してみましたが、役に立たなかった。 – Joris

+0

お詫び申し上げます、私はここで答えを見つけました:http://stackoverflow.com/questions/14861720/annotation-configuration-replacement-for-mvcresources-spring – Joris