grails是如何实现处理程序映射的?
我一直在尝试在SpringMVC应用程序中模拟grails的约定而不是配置范例,我发现很难自动化处理程序映射 基本上我有一个这样的控制器grails是如何实现处理程序映射的?,grails,spring-mvc,controller,mapping,url-mapping,Grails,Spring Mvc,Controller,Mapping,Url Mapping,我一直在尝试在SpringMVC应用程序中模拟grails的约定而不是配置范例,我发现很难自动化处理程序映射 基本上我有一个这样的控制器 @Controller @RequestMapping(value = {"/", "/contact"}) public class ContactController { @Autowired private ContactService contactService; @RequestMapping(value = {"/",
@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";
}
}
@控制器
@请求映射(值={”/“,“/contact”})
公共类联系人控制器{
@自动连线
私人联络服务;
@请求映射(值={”/“,“/index”})
公共字符串列表联系人(映射){
map.put(“contact”,newcontact());
map.put(“contactList”,contactService.listContact());
返回“联系人”;
}
@RequestMapping(value=“/add”,method=RequestMethod.POST)
公共字符串addContact(@modeldattribute(“contact”)contact contact,BindingResult){
contactService.addContact(contact);
返回“重定向:/contact/index”;
}
@RequestMapping(value=“/delete/{contactId}”,method=RequestMethod.GET)
公共字符串removeContact(@PathVariable(“contactId”)长contactId){
contactService.removeContact(contactId);
返回“重定向:/contact/index”;
}
}
现在,我尝试了“ControllerClassNameHandlerMapping”,但它似乎有三部分url的限制
我基本上希望所有请求自动映射到适当的控制器和操作,而不使用@RequestMapping
任何指针都会有很大的帮助,这并不容易。Grails框架已经编写了一系列ASTTransformer,它们将注释和其他属性注入到作为控制器的类中。看看grails插件控制器的源代码,您可以在compiler.web下看到这些代码,并了解它们在做什么。另外,如果您查看ControllersGrailsPlugin,您将看到它正在监视父文件夹下的目录GrailsApp。这不会那么容易做到的。希望这有助于更新 在您的情况下进行AST转换可能是最快的方法,可能是编译后的步骤 希望能有帮助
它不会那么简单,但您希望执行以下操作:
- 编写注释处理器(从类加载器扫描类路径)以收集控制器注释和匹配的类
- 钩住SpringMVCAPI,根据您的约定注入请求映射李>
- 然后还需要收集方法参数以自动注入pathVariables等