`
直线曲线
  • 浏览: 47049 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

SpringMVC常用注解项

阅读更多
来源:http://blog.sina.com.cn/s/blog_a43be7b001011lx9.html

常用注解元素

@Controller

         标注在Bean的类定义处

@RequestMapping

真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping 这个注解

@RequestMapping 可以标注在类定义处,将 Controller 和特定请求关联起来;

还可以标注在方法签名处,以便进一步对请求进行分流



   配套的属性有:

   value 需要跳转的地址

   method 基于RestFul的跳转参数,有RequestMethod.get  post  put  delete等

   params 符合某个参数的时候才调用该方法

   Headers 符合头信息的时候才调用



@SessionAttributes

         将结果放入session内

@ModelAttribute

存储在响应内容ModelMap或者ModelAndView进行保存值传到前台,当如果你需要保存值比较少

的时候可以采用这种方式进行保存值并且保存到前台显示



在默认情况下,ModelMap 中的属性作用域是 request 级别,相当于HttpServletRequest中的request.setAttribute() 一样, 在 JSP 视图页面中通过 request.getAttribute(“attribute name”) 或者通过

${ attribute name } EL 表达式访问模型对象中的 属性对象



如果希望在ModelMap 的作用域范围为 session,可以有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。这一功能是通过类定义处标注 @SessionAttributes 注解来实现 如:



@Controller

@RequestMapping("/login.do")

@SessionAttributes("currUser")  

public class BbtForumController {。。。。。}





@ResponseBody

         标注后  返回String对象的结果为response内容体,不标注的话  作为dispatcher url使用



@PathVariable

   允许将请求路径的制定内容当做求情的参数使用
返回类型

请求处理方法入参的可选类型                                                   说明

void                                       此时逻辑视图名由请求处理方法对应的 URL 确定,如以下的方法:

@RequestMapping("/welcome.do")

public void welcomeHandler() {

}

对应的逻辑视图名为“welcome”



String                                    此时逻辑视图名为返回的字符,如以下的方法:

@RequestMapping(method = RequestMethod.GET)

public String setupForm(@RequestParam("ownerId") int ownerId, ModelMap model) {

     Owner owner = this.clinic.loadOwner(ownerId);

     model.addAttribute(owner);

     return "ownerForm";

}

                                              对应的逻辑视图名为“ownerForm”



ModelMap                            和返回类型为 void 一样,逻辑视图名取决于对应请求的 URL,

如下面的例子:

@RequestMapping("/vets.do")

public ModelMap vetsHandler() {

     return new ModelMap(this.clinic.getVets());

}



对应的逻辑视图名为“vets”,返回的 ModelMap 将被作为请求对应的模型对象,

可以在 JSP 视图页面中访问到。

ModelAndView                 
返回方式

1 使用无返回方法跳转,如果使用返回方法进行跳转的话,则会通过视图解析器进行以

prefix(前缀)+方法名+suffix(后缀)组成的页面文件名称.



2 使用一个返回的字符串方法作为跳转,使用字符串跳转的话好处就是在return的时候可

以自己指定返回的名字,JSP组成是prefix(前缀)+返回的字符串+suffix(后缀)



3 返回一个ModelAndView类型,使用setViewName方法则可以跳转到指定的页面.


路径匹配形式

         1、单一Controller   对应 单一的请求路径

                   

2、单一Controller   对应多个请求路径



3、单一Controller  对应多个请求路径,且路径内可以含有参数的形式
Demo code and UseCase

@Controller

@RequestMapping("/login.do")

public class SinglePathWithController {}



@Controller

@SessionAttributes(types = {UserBean.class,String.class},value={"currentUser","message"})

public class AdapterMultiPathController {}



@Controller

@RequestMapping(value = "/rest")

public class RestWithController {}
无返回

//无返回值  无参数返回的是根据 prefix前缀+@RequestMapping value +suffix

后缀组成

      @RequestMapping("/springmvc/common")

      public voidnovoid(HttpServletRequest request) {

         request.setAttribute("message", "novoid方法被调用");

      }


返回字符串

1、  作为视图路径方式



//根据路径直接匹配

@RequestMapping("/springmvc/multiReqPath1.do")

    public String multiReqPath1(HttpServletRequest request){

       request.setAttribute("message", "multiReqPath1方法被调用");

       return "springmvc/common";

    }



    @RequestMapping("/springmvc/multiReqPath2.do")

    public String multiReqPath2(HttpServletRequest request){

       request.setAttribute("message", "multiReqPath2方法被调用");

       return "/springmvc/common";

    }



//根据参数匹配

    @RequestMapping(params = "m=method1",method = RequestMethod.GET)

    public String method1(){

       return "login/success";

}



//有参数  参数名和请求url内的变量名一致

    @RequestMapping(params = "m=method2")

    public String method2(String name,String pwd){

       return name;

}

//有参数 参数名和请求url内的变量名不一致

    @RequestMapping(params = "m=method3",method = RequestMethod.GET)

    public String method3(@RequestParam("loginName")String name,@RequestParam("loginPwd")String pwd,HttpServletRequest request){

       request.setAttribute("message",(name + " " + pwd));

       return "login/"+name;

    }



2、  作为Response内容方式

//无参数

    @ResponseBody

    @RequestMapping(params = "m=method4")

    public String method4(){

       return "hello,guys";

}



//处理方法入参如何绑定 URL 参数

    @ResponseBody

    @RequestMapping(params = "m=method5",method = RequestMethod.GET)

    public String method5(String name,String pwd,int delay){

       return "name:"+name+","+"pwd:"+pwd+","+"delay:"+delay;

}



@ResponseBody

    @RequestMapping(params = "m=method6",method = RequestMethod.GET)

    public String method6(@RequestParam("userName")String name,DnTest test){

       return "DnTest:"+test.toString();

    }



URL 参数: userName参数将绑定到name上  其他与DnTest类内属性名称一致的参数将绑定到test的对应的属性上,如果参数不全  也不会报错
返回ModelAndView

@RequestMapping("/springmvc/modelAndView")

    public ModelAndView modelAndView(){

       ModelAndView mav = new ModelAndView();

       mav.setViewName("/springmvc/common");

       mav.addObject("message", "modelAndView 方法被调用");

       return mav;

    }
返回ModelMap

    @RequestMapping("/springmvc/modelMap")

    public ModelMap modelMap(ModelMap modMap){

       List<String> names = new ArrayList<String>();

       names.add("Rick");

       names.add("Austin");

        modMap.put("names", names);

      

        modMap.put("message", "hello guys");

        modMap.put("comment", "hello guys");

      

        return modMap;

    }
返回ModelMap

@RequestMapping("/springmvc/modelMap")

    public ModelMap modelAndView(ModelMap modMap){

       List<String> names = new ArrayList<String>();

       names.add("Rick");

       names.add("Austin");

     

        modMap.put("hello", "hello guys");

        modMap.put("names", names);

        return modMap;

    }
@SessionAttribute & ModMap

//注解方式

@Controller

@SessionAttributes(types = {UserBean.class,String.class},value={"currentUser","message"})

public class AdapterMultiPathController {}



//方法体

@RequestMapping("/springmvc/modelMap2")

    public ModelMap modelMapWithSession(ModelMap modMap,HttpServletRequest request){

       List<String> names = new ArrayList<String>();

       names.add("Rick");

       names.add("Austin");

       modMap.put("names",names);

     

        modMap.put("message", "hello guys");

        modMap.put("comment", "hello guys");

      

        UserBean user = new UserBean();

        user.setName("Rick");

        user.setMobile("18938900256");

        user.setTelephone(request.getParameter("userPhone"));

        user.setNumber(request.getParameter("userNumber"));

        modMap.put("currentUser", user);

      

        return modMap;

    } 

//初次请求
spring mvc & reverse ajax

@ResponseBody

    @RequestMapping(params = "m=method7",method = RequestMethod.GET)

    public String method7(String name,String pwd,int delay,HttpServletRequest req){

       req.startAsync();

     

       Date startTime = new Date();

       try {

           Thread.currentThread().sleep(delay);

       } catch (InterruptedException e) {

           e.printStackTrace();

       }

       Date entTime = new Date();

     

       return "name:"+name+","+"pwd:"+pwd+","+"delay:"+delay+",startTime:"+

              DateUtils.formatDate(startTime, "yyyy-MM-dd HH:mm:ss:SSS")+",endTime:"+

              DateUtils.formatDate(entTime, "yyyy-MM-dd HH:mm:ss:SSS");

    }


RestFull

@Controller

@RequestMapping(value = "/rest")

public class RestWithController {}



@ResponseBody

    @RequestMapping(value = "/{msg}", method = RequestMethod.GET)

    public String restString(@PathVariable String msg) {

       return msg;

    }



    @ResponseBody

    @RequestMapping(value = "/{path}/{value}", method = RequestMethod.GET)

    public String restXml(@PathVariable String path,@PathVariable String value) {

       return "path:"+path+",value:"+value;

    }

    @ResponseBody

    @RequestMapping(value = "/xml/{filename}", method = RequestMethod.GET)

    public String restFile(@PathVariable String filename) {

       if (filename!=null) {

           ProjectInits init = ProjectInits.getInstance();

           String dir = init.get("resource.dir", "C:/Projects/VoyagerWeb/resources");

           FileUtility fUtil = new FileUtility();

           String content = fUtil.readFile(dir+"/"+filename+".xml");

           return content;

       }

       else

           return "Invalid xml file name ["+filename+"]";

    }




验证 是否支持Overload
方式一

//验证 是否支持Overload

    @ResponseBody

    @RequestMapping(value = "/validate/overload1", method = RequestMethod.GET)

    public String overloadMethod(String name){

       return name;

    }

    @ResponseBody

    @RequestMapping(value = "/validate/overload2", method = RequestMethod.GET)

    public String overloadMethod(String name,DnTest test){

       return "DnTest:"+test.toString();

    }


分享到:
评论

相关推荐

    springMVC + mybatis 的环境搭建

    Eclipse或IntelliJ IDEA是常用的选项,它们都有很好的对Spring和MyBatis的支持。下载并安装你喜欢的IDE,然后创建一个新的Java Web项目。 在项目中引入SpringMVC和MyBatis的依赖。如果你使用的是Maven,你需要在pom...

    Java常用框架

    ##### SpringMVC常用注解 在SpringMVC中,有许多注解用于实现特定的功能,常见的包括: - `@Controller`:标记一个类为控制器。 - `@RequestMapping`:定义请求路径与处理方法之间的映射关系。 - `@Autowired`:...

    springmvc+mybatis 手机端后台demo

    在本项目中,"springmvc+mybatis 手机端后台demo"是一个为初学者设计的实战案例,旨在展示如何构建一个基于Spring MVC和MyBatis的移动应用后台服务。这个示例涵盖了权限验证、数据访问层的实现以及MyBatis的分页查询...

    客户管理系统

    总结来说,"客户管理系统&lt;SpringMVC+JSP+mybatis&gt;"是一个绝佳的学习资源,它涵盖了Web开发中常用的技术栈,帮助新手理解并实践MVC设计模式,掌握数据库操作,以及前后端交互的原理。在实践中不断学习和进步,是成长...

    SpringMVC_源码分析代码.zip

    总之,SpringMVC的源码分析是一项有价值的任务,它能帮助开发者提升对SpringMVC框架的理解,提高编程技能,以及解决实际开发中遇到的问题。在分析过程中,配合"5.SpringMVC_output"这样的示例或结果,可以更直观地...

    Spring高级之注解驱动开发视频教程

    n 基础应用-常用注解使用场景介绍及入门 n 高级特性-自定义BeanNameGenerator n 高级特性-自定义TypeFilter n 高级特性-ImportSelector和ImportBeanDefinitionRegistrar的分析 n 高级特性-自定义ImportSelector n ...

    ssm spring springmvc mybatis

    SSM框架,全称为Spring、SpringMVC和MyBatis,是Java开发Web应用时常用的一个集成框架。这个框架组合提供了完整的控制层、业务层和数据访问层的解决方案,极大地提高了开发效率。以下是对这三个核心组件及其在SSM...

    在idea下使用maven构建spring+springMVC+hibernate架构

    在IT行业中,构建高效、可扩展的Web应用是至关重要的,而Spring、SpringMVC和Hibernate这三大框架的结合正是实现这一目标的常用方案。本文将深入探讨如何在IntelliJ IDEA(简称IDEA)环境下,利用Maven来构建一个...

    SpringMVC基础篇笔记.docx基础篇笔记.docx

    - **文件上传**:SpringMVC支持通过`@RequestParam`注解来处理文件上传。 - **配置项**:需要配置文件上传的限制大小等相关属性。 #### 十一、使用拦截器 - **拦截器**:在SpringMVC中,拦截器可以在请求到达控制器...

    Spirng+SpringMVC+Maven+Mybatis+MySQL+tomcat实例

    在这个实例中,你会看到XML配置文件或注解方式定义的SQL映射,以及如何在Service层中调用这些SQL。 Maven是Java项目的构建工具,它管理项目的依赖关系,自动化构建流程,如编译、测试、打包等。在`pom.xml`文件中,...

    springMVC&myBatis;整合jar包

    Spring MVC和MyBatis是Java开发中常用的两个框架,它们分别负责Web层和持久层的管理。Spring MVC作为Spring框架的一部分,提供了强大的Model-View-Controller(MVC)架构模式,使得开发人员能够轻松地处理HTTP请求和...

    完整版 Java开发实训课程系列-SpringMVC框架技术教程 第4章 参数绑定 (共20页).pptx

    SpringMVC框架是Java开发中常用的Web MVC框架,它提供了强大的功能用于构建高效、模块化的Web应用程序。在SpringMVC中,参数绑定是其核心功能之一,它负责将客户端发送的HTTP请求数据映射到Controller处理方法的参数...

    springmvc事务配置到controller.zip

    声明式事务管理是Spring中最常用的方式,它通过在方法上添加注解来控制事务的边界。这些注解主要包括`@Transactional`、`@Transactional(propagation = Propagation.REQUIRED)`、`@Transactional(propagation = ...

    SpringMVC框架中reids的使用

    在SpringMVC框架中,Redis是一个非常常用的高性能、开源、内存数据结构存储系统,它不仅可以作为数据库,还可以作为缓存和消息代理。本教程将深入探讨如何在SpringMVC项目中集成并有效利用Redis。 首先,我们需要...

    基于spring+springmvc+hibernate的在线招标软件

    在IT行业中,构建一个基于Spring、SpringMVC和Hibernate的在线招标软件是一项常见的任务,它涉及到企业级应用开发的关键技术和架构。Spring框架以其强大的依赖注入(Dependency Injection, DI)和面向切面编程...

    spring5mvc第一天【大纲笔记】.zip

    三、常用注解 3.1 @RequestMapping 此注解用于映射HTTP请求,可以用于类或方法,用于指定URL路径。在类级别上用于设置公共前缀,在方法级别上指定具体的URL路径。 3.2 @GetMapping、@PostMapping、@PutMapping、@...

    java常用框架学习笔记

    SpringMVC提供了许多注解来简化Web开发,如`@Controller`、`@RequestMapping`等。 ##### 8.2.1 SpringMVC中URL路径的映射规则 SpringMVC通过`@RequestMapping`注解来定义控制器类或方法与URL的映射关系。 ##### ...

    SpringMVC 中配置 Swagger 插件的教程(分享)

    常用的 Swagger 注解有: * @Api:用在类上,说明该类的作用。 * @ApiOperation:用在方法上,说明方法的作用。 * @ApiParam:用在参数列表中,表明参数的含义。 * @ApiImplicitParams:用在方法上包含一组参数说明...

    SpringMVC使用MultipartFile 实现异步上传方法介绍

    SpringMVC是Java web开发中常用的框架之一,它提供了许多实用的功能和组件,例如MultipartFile,可以用来实现文件上传功能。异步上传是现代Web应用程序中常用的技术,它可以提高用户体验和系统性能。本文将介绍如何...

    详解SpringMVC加载配置Properties文件的几种方式

    这是最常用的方式,通过在Spring的配置文件(如`spring.xml`)中引入`context`命名空间,并使用`context:property-placeholder`标签来指定Properties文件的位置。 ```xml xmlns:context=...

Global site tag (gtag.js) - Google Analytics