`

spring aop,@PathVariable

阅读更多

在开发过程中想要页面根据用户所选语言显示不同的语言文字。

相关国际化技术: http://slnddd.iteye.com/admin/blogs/2339737

上篇文章使用的url形式是 127.0.0.1:8080/list?lang=en

但是总觉得不太好,想变换成restful风格的url  : 127.0.0.1:8080/en/list 这种

 

又因为想要在每个RequestMapping页面跳转的方法后,都能把当前的lang传递到前台,所以就想到了aop的形式。

@Aspect
@Component
public class ControllerInterceptor {
    //拦截前四个参数是 request,response,model,lang的requestMapping请求
    @Pointcut("execution(* com.xxxx.xxxx.xxxx.controller..*(..)) and @annotation(org.springframework.web.bind.annotation.RequestMapping)")  
    public void excute(){}
    
    @Around("excute() && args(request,response,model,lang,..)")
    public ModelAndView around(ProceedingJoinPoint joinPoint,HttpServletRequest request,HttpServletResponse response,ModelAndView model,String lang) throws Throwable {
        
        Object[] args = joinPoint.getArgs();
        joinPoint.getArgs()[3] = lang;
        joinPoint.proceed(args); 
        
        model.addObject("lang", lang);
        
        return model;
    }
    
}

   

//正则表达式形式
   @RequestMapping(value = "/{lang:en|zh}/list")
    public ModelAndView list(HttpServletRequest request,HttpServletResponse response,ModelAndView model,@PathVariable String lang) {
     
        model.setViewName("index");
        
        return model;
        
    }

 这种带参数的url 如果在没有 @PathVariable ,那么127.0.0.1:8080/en/list 这种形式,在aop那里获取是获取不到的,加上@PathVariable 就可以获取到了。

 

也就是说127.0.0.1:8080/{lang}/list 这种形式的,首先必须要传参数,不然直接就是404了,然后是需要使用@PathVariable

 

还有一点很奇怪的是String lang这种形式传递不过来,但是如果是对象类型的bean就可以传递进来了,是因为程序在执行的时候,发现是127.0.0.1:8080/{lang}/list这种类型的url时,首先会查找参数中是否有@PathVariable注解,如果有并且是同名的就进行赋值了,bean对象的话就是直接查找有同名的就进行赋值了

 

    

分享到:
评论

相关推荐

    Spring注解 - 52注解 - 原稿笔记

    @JsonPropertyOrder , @JsonSerialize , @JsonSetter , @Lazy , @Order , @PathVariable , @Pointcut , @PostConstruct , @PostMapping , @PreDestroy , @Primary , @PropertySource , @Qualifier , @Repository , ...

    Spring注解 @Component、@Repository、@Service、@Controller区别

    在现代软件开发中,尤其是Java领域的企业级应用开发中,Spring框架因其灵活、强大的依赖注入(DI)和面向切面编程(AOP)功能而备受推崇。随着Spring框架的不断发展和完善,它为开发者提供了更多便捷的方式来简化...

    spring-mvc jar包

    对于依赖管理,"aopalliance"标签可能指的是AOP(面向切面编程)联盟包,它为不同AOP实现提供了一个通用接口,使得Spring的AOP功能可以和其他AOP库兼容。在Spring MVC中,AOP常用于日志记录、事务管理、性能监控等...

    spring2.5基于注解例子程序

    Spring 2.5是Spring框架的一个重要版本,它引入了大量增强的功能,特别是对注解的支持,这使得在Java应用程序中实现依赖注入和面向切面编程(AOP)变得更加简单和直观。在这个基于注解的例子程序中,我们将深入探讨...

    简单实用spring MVC教程

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一个模块,主要用于构建 MVC(Model-View-...继续深入学习,包括 AOP、事务管理、国际化、MVC 数据绑定等,你将能够驾驭更复杂的项目。

    org.springframework.web.servlet-3.1.0.RELEASE.jar.zip

    它提供了灵活的请求处理机制,支持多种视图技术,并通过依赖注入(DI)和面向切面编程(AOP)提供了高度解耦的架构设计。 在Spring 3.1.0.RELEASE中,有一些显著的改进和特性: 1. **ModelAndView对象**:它是...

    spring3.0.5.jar

    《Spring 3.0.5与AOPAlliance-1.0在Java开发中的应用》 Spring框架作为Java企业级应用开发的重要支柱,其3.0.5版本的发布为开发者提供了更为强大和灵活的工具集。这个版本的Spring不仅在核心功能上进行了优化,还对...

    spring mvc

    Spring MVC 可以与其他 Spring 模块(如 Spring Data、Spring Security、Spring AOP 等)无缝集成,构建完整的应用程序。 ### 总结 Spring MVC 以其灵活性、易用性和强大的功能在 Java Web 开发领域占据重要地位。...

    spring_mvc_jar.zip

    15. **Aspect Oriented Programming (AOP)**:Spring MVC可以与Spring AOP结合,实现如事务管理、日志记录等切面编程功能。 16. **HandlerMapping**:处理程序映射器根据请求信息找到合适的处理器,如`...

    spirngmvc+spring实例

    Spring MVC 是 Spring 框架的一部分,专门用于处理 Web 请求和响应,而 Spring 框架则提供了依赖注入、AOP(面向切面编程)等核心功能。在"spirngmvc+spring实例"中,我们将会探讨这两个框架如何协同工作来实现前端...

    spring MVC_快速入门

    Spring MVC 是一个强大的Java Web开发框架,用于构建高效、可维护和模块化的Web应用程序。...通过学习,开发者可以快速搭建起一个功能完善的Web应用,并逐步深入到更高级的特性,如AOP、事务管理等。

    最全最经典spring-mvc教程

    另外,Spring MVC与Spring框架的其他组件无缝集成,如Spring AOP(面向切面编程)用于实现日志、事务管理等功能,Spring JDBC和MyBatis等持久层框架用于数据库操作,以及Spring Data JPA、Hibernate等ORM工具,使得...

    尚硅谷-佟刚_Spring

    6. **Spring AOP**:在"Spring"学习中,AOP是一个重要的话题。AOP用于处理系统中分布于各个模块的横切关注点,如日志、事务管理等。Spring提供了基于代理的AOP和基于注解的AOP两种实现方式。 7. **Spring MVC**:...

    类似Spring Controller 注解Demo

    这涉及到AOP(面向切面编程)的概念,Spring通过代理模式动态地织入拦截器(如模型绑定、异常处理等)。 此外,`@RequestParam`、`@PathVariable`、`@RequestBody`等注解也常与Controller一起使用,它们帮助我们从...

    Spring拦截器,高级参数绑定

    Spring MVC中的拦截器是基于AOP(面向切面编程)原理实现的,可以理解为对Controller方法调用的预处理和后处理。下面将详细探讨Spring拦截器的使用以及高级参数绑定和Controller返回值的相关知识。 首先,我们创建...

    Spring MVC框架简介和使用

    - **与 Spring 完美融合**:作为 Spring 框架的一部分,Spring MVC 可以无缝集成 Spring 的其他特性,如依赖注入(IoC)、面向切面编程(AOP)等。 - **约定优于配置**:Spring MVC 遵循约定优于配置的原则,减少了...

    spring 3.1.0 jar包

    在这个版本中,Spring继续强化了其在企业级应用开发中的地位,尤其是在依赖注入、AOP(面向切面编程)、数据访问、Web开发以及测试等方面。 首先,依赖注入是Spring的核心特性,允许对象之间的关系在运行时被外部...

    Java Spring MVC面试题

    2. 与Spring框架集成(如IoC容器、AOP等)。 3. 清晰的角色分配:前端控制器、请求到处理器映射、处理器适配器、视图解析器。 4. 支持各种请求资源的映射策略。 工作原理 Spring MVC的工作流程包括: 1. ...

    跟我学spring3

    在Spring3中,我们还可以使用AOP(面向切面编程)来实现跨切面的关注点,如日志记录、事务管理等。@Before、@After、@Around等注解可以定义切面的前置通知、后置通知和环绕通知,让代码更加模块化。 至于文档...

    面渣逆袭:Spring三十五问,四万字+五十图详解.doc

    * Spring 的七大模块:Spring Core、Spring Context、Spring Web、Spring MVC、Spring DAO、Spring ORM、Spring AOP。 * 每个模块都有其特定的功能和应用场景。 三、Spring 的常用注解 * Web 模块中的常用注解有:...

Global site tag (gtag.js) - Google Analytics