2013-05-07 36 views
1

我一直試圖在spring mvc應用程序中模擬grails的約定而不是配置範例,我發現很難自動化處理程序映射。Grails如何實現處理程序映射?

基本上我有一個這樣的控制器。

@Controller 
@RequestMapping(value = {"/", "/contact"}) 
public class ContactController { 

    @Autowired 
    private ContactService contactService; 

    @RequestMapping(value = {"/","/index"}) 
    public String listContacts(Map<String, Object> map){ 
     map.put("contact", new Contact()); 
     map.put("contactList", contactService.listContact()); 
     return "contact"; 
    } 

    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    public String addContact(@ModelAttribute("contact")Contact contact, BindingResult result){ 

     contactService.addContact(contact); 

     return "redirect:/contact/index"; 
    } 

    @RequestMapping(value = "/delete/{contactId}", method = RequestMethod.GET) 
    public String removeContact(@PathVariable("contactId")Long contactId){ 
     contactService.removeContact(contactId); 
     return "redirect:/contact/index"; 
    } 
} 

現在,我試過「ControllerClassNameHandlerMapping」,但它似乎有三個部分的網址的限制。

我基本上希望所有的請求將被自動映射到相應的控制器和行動,而無需使用@RequestMapping

任何指針將是很大的幫助

回答

0

這並不容易。 Grails框架已經寫了一堆ASTTransformers,它們將註釋和其他屬性注入到控制器的類中。看看grails-plugin-controllers的源代碼,你可以看到compiler.web下的代碼,看看他們在做什麼。此外,如果你在ControllersGrailsPlugin看看你會看到它的看着父文件夾下的目錄的Grails應用程序內。這不會那麼容易做到。希望這有助於

0

UPDATE

製作AST轉換via ASM你的情況,可能是最快的方式,也許編譯後步驟?

希望它可以幫助


這不會是簡單的,但你想要的東西很可能要進行以下操作:

  • 寫註釋處理器(從類加載器掃描類路徑)來收集控制器註釋和匹配類
  • 掛鉤到Spring mvc API以基於您的約定注入請求映射。
  • 然後,你還需要收集方法的參數自動注入pathVariables等

如果Spring MVC的不期待儘快與RequestMapping註釋發揮其作爲控制器註釋被找到(或默認(Post Bean Definition處理器或類似的機制)...

不是那麼簡單,但絕對有可能...