2013-03-13 21 views
9

Spring MVC aşağıdaki yapabilirJenerik Bahar MVC denetleyicisi ile Kalıtım

varsayalım "/ liste" Aşağıda

@Controller 
public class GenericController<T>{ 

    @RequestMapping(method = RequestMethod.GET, value = "/list") 
    public @ResponseBody List<T> getMyPage(){ 
     // returns list of T 
    } 

} 

benim iki kontrolörleri

olan bir istek haritalama ile aşağıdaki şekilde ben Baz GenericController var
@Controller(value = "/page1") 
public class Page1Controller extends GenericController<Page1>{ 

} 

@Controller(value = "/page2") 
public class Page2Controller extends GenericController<Page2>{ 

} 

Şimdi ilk olarak Page1Controller'a gidip ikinci olarak Page2Controller'a gidip "/ page1/list" ve "/ page2/list" URL'lerine erişebileceğim.

+3

AFAIK, ek açıklamaları devralınmaz, bu nedenle Spring JIRA bağlantısı için beklendiği gibi çalışmayabilir –

cevap

13

Bu mümkün değil ve zaten reddedildi, bkz. SPR-10089. Bunun biraz kafa karıştırıcı olacağını düşünüyorum ve ek olarak, bu yöntemin, farklı haritalamanın yanı sıra, tam olarak aynı davranması pek olası değildir. Ama bunun yerine heyet kullanabilirsiniz: Bahar Çerçeve 4.x ile benzer bir şey arayanlar için

public class BaseController<T> { 
    public List<T> getPageList(){ 
     // returns list of T 
    } 
} 

@Controller(value = "/page1") 
public class Page1Controller extends BaseController<Page1>{ 
    @RequestMapping(method = RequestMethod.GET, value = "/list") 
    public @ResponseBody List<Page1> getMyPage() { 
     return super.getPageList(); 
    }  
} 

@Controller(value = "/page2") 
public class Page2Controller extends BaseController<Page2>{ 
    @RequestMapping(method = RequestMethod.GET, value = "/list") 
    public @ResponseBody List<Page2> getMyPage() { 
     return super.getPageList(); 
    } 
} 
+1

+1. –

+0

bunun doğru olduğundan emin değil, –

+0

Bence SPR-10089 kavramsal olarak çalışması gereken bu örneğe uymuyor. SPR-10089, sınıf düzeyinde @RequestMapping üzerinde url eşleştirmelerini "istiflemez". Tam bir açıklama için bu http://stackoverflow.com/questions/5268643/spring-mvc-requestmapping-inheritance bakın. –

3

, OP tarafından sağlanan sınıf hiyerarşisi mümkündür. Örnek bir uygulama Github'da kullanılabilir. Kullanıcıların bir kitap listesini ya da bir dergi listesini JSON olarak görüntülemelerini sağlar.

+0

Neden süper türünün 'RequestMapping 'ek açıklamalarına sahip olmadığını söylüyorsunuz? Süper tip 'BaseController'' sorudaki ilk kod parçacığının ne olduğunu 'list' yönteminde ek açıklamaya sahiptir. Farklı bir gereksiniminiz olabilir ve kafanız karıştı mı? – manish

+0

manish, haklısınız, yanlış yorum için üzgünüm - Ben sileceğim ve upvote ;-) Düzenleme: Çözüm benim için iyi çalışıyor, bu yüzden IMO bu doğru cevap. –

+0

@MichaelWyraz, onay için teşekkürler. :) – manish