2012-10-25 39 views
3

前和后处理功能,我希望能有以下几点:弹簧3的Web MVC - @Controller()方法,通过注释

@Controller  
public class MyController { 

    @RequestMapping(value="/someurl", method=RequestMethod.GET) 
    @PreProcess 
    @PostProcess 
    public String doStuff(ModelMap map) { 
     //do stuff 
     return "someurl"; 
    } 

} 

@PreProcess@PostProcess被任意命名的注解。

我一直在寻找这个工作的例子,但我找不到任何。我已经看过AOP和使用@Aspect注释,但我发现它非常复杂。我试图做的一个工作例子会很棒。

我过去抽样了Spring Security,但这并不是我所需要的,因为我需要的处理是自定义的,几乎任何我想要的。

我知道这个功能在.Net MVC中可用。希望它也可以在Spring中使用。

任何帮助或指针真的很感激。

+0

在这里检查'@ PostConstruct'和'@ PreDestroy' http://www.mkyong.com/spring/spring-postconstruct-and-predestroy-example/ –

+0

你到底想要触发什么?这些注释是否会指向要执行的内容,或者方法本身会在执行前后执行? – Eugen

+0

你可能用户mvc:interceptor –

回答

4

您可以使用@ModelAttribute注释方法在控制器方法之前执行方法。或使用interceptor

实施例与@ModelAttribute

@Controller  
public class MyController { 

    @RequestMapping(value="/someurl", method=RequestMethod.GET) 
    public String doStuff(@ModelAttribute("something") Something something, ModelMap map) { 
     //do stuff 
     // here you can do what you want with something it has been provided to you in the method parameters 
     return "someurl"; 
    } 

    @ModelAttribute("something") 
    public Something something() { 
     // do what you need 
     return new Something(); 
    } 
} 

something()方法将之前具有@RequestMapping注释每一个方法被调用,因而doStuff()方法之前。

+0

非常感谢,这似乎是伎俩。我是否正确地说,要将这些拦截器应用于的url只能在app-context XML中配置?从我所能找到的看来,拦截器似乎只能通过XML而不是注解来应用于某些URL。 – John

+0

你是对的,只能通过XML配置来配置拦截器。也许在下一个版本中,他们将通过注释使其成为可能。但是,拦截器不仅可用于特定的网址,您可以在全球范围内使用它们。只是不要为它定义任何URL。 – Alex

+0

请参阅下面的'LocaleChangeInterceptor',它可以全局定义,以便可以通过添加'?locale = fr'将语言环境更改为法语。 http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/servlet/i18n/LocaleChangeInterceptor.html – Alex