如何在spring中将变量从视图传递到控制器方法

时间:2013-02-02 05:45:34

标签: spring logging aop

我正在尝试使用AOP在春季记录运行时数据。我能够记录静态消息。但我的问题是我必须记录用户给出的输入值(Eg.Name),我的日志消息应该是" Siva已登录"如果用户输入'siva'作为表单中的用户名。

我有一个带有文本框的jsp表单用于获取用户名,bean类有setter和getter用于用户名,控制器类和方面类。

我的控制器类是:

@RequestMapping("/login.htm")

public ModelAndView success(String name){

}

我的Aspect类是:

   @After("execution(* com.controller.MyController.success(String))&&args(name)")

public void After(){

    System.out.println("after method");
}

我不知道如何在控制器方法中获取用户名。我完全失明了。我搜索并尝试了许多可能性,但没有成功。任何帮助表示赞赏....提前致谢...

2 个答案:

答案 0 :(得分:0)

要在控制器方法中获取username参数,您只需要使用@RequestParam注释“name”参数。 e.g:

@RequestMapping("/login.htm")

public ModelAndView success(@RequestParam("name") String name){

}

要在你的建议中获取名称,只需将after方法的签名更改为接受“name”字符串:

@After("execution(* com.controller.MyController.success(String))&&args(name)")

public void after(String name){
    logger.info("User "+name+" has logged in!");
}

希望它解决问题。

答案 1 :(得分:0)

//your Aspect class
@Aspect
@Component
public class MyAspect {

    @Pointcut("execution(* com.controller.MyController.success(..)) && args(username)")
    public void controllerExecution(String username){};

    @After("controllerExecution(username)")
    public void afterControllerExecution(final String username){
         System.out.println("username is : " + username);
    }
}

//the method in your controller
@RequestMapping(value="/success")
public String success(String username){
    return "home";
}

请求网址如下:www.XXX.com/success?username = Johnny @Piyush Joshi,在这种情况下,你不一定必须使用@RequestParam才能让AOP正常工作。