Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
grails是如何实现处理程序映射的?_Grails_Spring Mvc_Controller_Mapping_Url Mapping - Fatal编程技术网

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 = {"/",

我一直在尝试在SpringMVC应用程序中模拟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";
    }
}
@控制器
@请求映射(值={”/“,“/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等
如果SpringMVC不希望在找到控制器注释(或默认为某个注释)后立即使用RequestMapping注释,那么您就可以开始了(后Bean定义处理器或类似机制)

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