2013-05-07 83 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处理器或类似的机制)...

不是那么简单,但绝对有可能...