Grails如何实现处理程序映射?

时间:2013-05-07 12:47:32

标签: grails spring-mvc controller mapping url-mapping

我一直在尝试在spring mvc应用程序中模拟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

任何指针都会很有帮助

2 个答案:

答案 0 :(得分:0)

这并不容易。 Grails框架编写了一堆ASTTransformers,它们将注释和其他属性注入到控制器类中。看一下grails-plugin-controllers的源代码,你可以看看compiler.web下的代码,看看他们在做什么。此外,如果你看看ControllersGrailsPlugin,你会看到它在父文件夹下观看grails-app目录。做起来并不容易。希望这有帮助

答案 1 :(得分:0)

更新

在您的情况下进行AST转换via ASM可能是最快的方式,也许是后编译步骤?

希望有所帮助


它不会那么简单,但你想要的可能会执行以下操作:

  • 编写注释处理器(从类加载器扫描类路径)以收集控制器注释和匹配类
  • 根据您的约定,使用Spring mvc API注入请求映射。
  • 然后你还需要收集方法参数来自动注入pathVariables等。

如果找到Controller注释后Spring Spring MVC不希望使用RequestMapping注释(或默认为某些内容),那么你很高兴(Post Bean Definition处理器或类似机制)... < / p>

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