我一直在尝试在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
任何指针都会很有帮助
答案 0 :(得分:0)
这并不容易。 Grails框架编写了一堆ASTTransformers,它们将注释和其他属性注入到控制器类中。看一下grails-plugin-controllers的源代码,你可以看看compiler.web下的代码,看看他们在做什么。此外,如果你看看ControllersGrailsPlugin,你会看到它在父文件夹下观看grails-app目录。做起来并不容易。希望这有帮助
答案 1 :(得分:0)
更新
在您的情况下进行AST转换via ASM可能是最快的方式,也许是后编译步骤?
希望有所帮助
它不会那么简单,但你想要的可能会执行以下操作:
如果找到Controller注释后Spring Spring MVC不希望使用RequestMapping注释(或默认为某些内容),那么你很高兴(Post Bean Definition处理器或类似机制)... < / p>
不是那么简单,但绝对可能......