注解(annotation)

@Controller

@Controller是扩展的@Component的,可以说基本一样,就是作为一种标志。

@RequestMapping

  • value:     指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
  • method:  指定请求的method类型, GET、POST、PUT、DELETE等;
  • consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
  • produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
  • params: 指定request中必须包含某些参数值是,才让该方法处理。
  • headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

请求处理方法可以出现的参数类型:

  • request
  • response
  • session
  • Model
  • ModelMap
  • @PathVaribale
  • @RequestParam
  • @RequestHeader
  • RequestBody

只要正确的添加了参数,spring会就传递给你,不在意参数的顺序。

还有其他的,不一一罗列了。

请求参数中可以返回的类型:

  • ModelAndView
  • Model
  • Map
  • View
  • String
  • void
  • Callable

关于model

model中addAttribute的内容是放在request中的。

如下:

  1. @RequestMapping(value="/test2")
  2. public String test2(HttpServletRequest request,Model model)
  3. {
  4.    request.setAttribute("att1", "val55");
  5.    model.addAttribute("att2", "val2");
  6.    return "test2";
  7. }
  8.  
  9.  
  10. <body>
  11. att1:${requestScope.att1}
  12. att2:${requestScope.att2}
  13. </body>

结果如下:

@RequestParam

有如下属性:

  • name
  • value
  • required
  • defaultValue
  1. @RequestMapping(value="/test3")
  2.    public String test3(HttpServletRequest request,Model model,@RequestParam(value="name") String name,@RequestParam(value="age") int age )
  3.    {
  4.  
  5.       model.addAttribute("name", name);
  6.       model.addAttribute("age", age);
  7.       return "test3";
  8.    }
  9.  
  10.  
  11. <body>
  12. name:${requestScope.name}
  13. <br/>
  14. age:${requestScope.age}
  15. </body>

@PathVariable

  1. @RequestMapping(value="/test4/{name}")
  2.    public String test4(HttpServletRequest request,Model model,@PathVariable String name)
  3.    {
  4.  
  5.       model.addAttribute("name", name);
  6.       return "test4";
  7.    }
  8.  
  9. <body>
  10. name:${requestScope.name}
  11. </body>

@CookieValue

@RequestHeader

@SessionAttribute

@ModelAttribute

ModelAttribute作用在方法上,会在一个Controller里的每个方法执行前都执行,目的是为了给model中增加公共数据。慎用这个功能。

ModelAttribute也可以用在一个方法参数上。表示从Model中获取属性(如果有),并会将对象放入model中给前台(如果提交的表单中没有匹配,那么就是一个new的对象,所以这个对象必须要有无参构造函数)。

从http请求中获取对象:

  1. public class User {
  2.    private String name;
  3.    private int age;
  4.  
  5.    public String getName() {
  6.       return name;
  7.    }
  8.    public void setName(String name) {
  9.       this.name = name;
  10.    }
  11.    public int getAge() {
  12.       return age;
  13.    }
  14.    public void setAge(int age) {
  15.       this.age = age;
  16.    }
  17.  
  18. }
  19.  
  20.  
  21. @RequestMapping(value="/test5")
  22.    public String test5(HttpServletRequest request,Model model,@ModelAttribute User user)
  23.    {
  24.       return "test5";
  25.    }
  26.  
  27.  
  28. <body>
  29. name:${requestScope.user.name}
  30. <br/>
  31. age:${requestScope.user.age}
  32. </body>

注意:@ModelAttribute User user这一部分不加@ModelAttribute也可以从表单中获取一个转换的对象,但是不会将对象放入对象放入model中。

在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制,就是Spring3.x中新引入的HttpMessageConverter即消息转换器机制。HttpMessageConverter接口指定了一个可以把Http request信息和Http response信息进行格式转换的转换器。通常实现HttpMessageConverter接口的转换器有以下几种:

  • ByteArrayHttpMessageConverter: 负责读取二进制格式的数据和写出二进制格式的数据;
  • StringHttpMessageConverter:   负责读取字符串格式的数据和写出二进制格式的数据;
  • ResourceHttpMessageConverter:负责读取资源文件和写出资源文件数据;
  • FormHttpMessageConverter:       负责读取form提交的数据(能读取的数据格式为 application/x-www-form-urlencoded,不能读取multipart/form-data格式数据);负责写入application/x-www-from-urlencoded和multipart/form-data格式的数据;
  • MappingJacksonHttpMessageConverter:  负责读取和写入json格式的数据;
  • SourceHttpMessageConverter:                   负责读取和写入 xml 中javax.xml.transform.Source定义的数据;
  • Jaxb2RootElementHttpMessageConverter:  负责读取和写入xml 标签格式的数据;
  • AtomFeedHttpMessageConverter:              负责读取和写入Atom格式的数据;
  • RssChannelHttpMessageConverter:           负责读取和写入RSS格式的数据;
  1. @Controller
  2. public class PersonController {
  3.  
  4.     /**
  5.      * 查询个人信息
  6.      *
  7.      * @param id
  8.      * @return
  9.      */
  10.     @RequestMapping(value = "/person/profile/{id}/{name}/{status}", method = RequestMethod.GET)
  11.     public @ResponseBody
  12.     Person porfile(@PathVariable int id, @PathVariable String name,
  13.             @PathVariable boolean status) {
  14.         return new Person(id, name, status);
  15.     }
  16.  
  17.     /**
  18.      * 登录
  19.      *
  20.      * @param person
  21.      * @return
  22.      */
  23.     @RequestMapping(value = "/person/login", method = RequestMethod.POST)
  24.     public @ResponseBody
  25.     Person login(@RequestBody Person person) {
  26.         return person;
  27.     }
  28. }

@ResponseBody 注释用于将返回对象(Employee 或 EmployeeList)变为响应的正文内容,将使用 MappingJacksonHttpMessageConverter 将其映射到 JSON。

HttpMessageConverter接口,需要开启<mvc:annotation-driven  />。 
AnnotationMethodHandlerAdapter将会初始化7个转换器,可以通过调用AnnotationMethodHandlerAdapter的getMessageConverts()方法来获取转换器的一个集合 List<HttpMessageConverter>

  • ByteArrayHttpMessageConverter 
  • StringHttpMessageConverter
  • ResourceHttpMessageConverter 
  • SourceHttpMessageConverter
  • XmlAwareFormHttpMessageConverter
  • Jaxb2RootElementHttpMessageConverter 
  • MappingJacksonHttpMessageConverter

Spring + Mybatis 企业应用实战 第3章 Sping MVC的常用注解的更多相关文章

  1. Spring + Mybatis 企业应用实战 第1章 Java EE应用

    Java EE应用的分层模型: Domain Object 领域对象层.就是一些pojo. DAO(data access object) 数据访问对象 Service 业务逻辑层 Controlle ...

  2. 《Spring + MyBatis 企业应用实战》书评

    最近公司的前端用 MpVUE.JS 开发微信小程序遇到一个问题,对后端传来的富文本编辑器的标签无法进行解析.因为公司小,这个问题前端人员直接反映给老板,跟老板说,“ MpVUE.JS 无法解析富文本编 ...

  3. Spring +Mybatis 企业应用实战(脑图)

  4. spring 以及 spring mvc 中常用注解整理

    spring 以及 spring mvc 中常用注解整理 @RequestMapping(映射路径) @Autowired(注入 bean 对象) 例如: @Autowired private Bas ...

  5. Spring MVC的常用注解(一)

    概述 Spring从2.5版本开始引入注解,虽然版本不断变化,但是注解的特性一直被延续下来并不断进行扩展,这里就来记录一下Spring MVC中常用的注解,本文记录@Controller.@Reque ...

  6. 轻量级Java_EE企业应用实战-第5章Hibernate的基本用法-001

    1. package org.crazyit.app.domain; import javax.persistence.*; /** * Description: <br/> * ��վ: ...

  7. Spring MVC的常用注解

    一.@Controller @Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为类名称开头字母小写,你也可以自己指定. 二.@RequestMapping ...

  8. 图书-技术-SpringBoot:《Spring Boot2 + Thymeleaf 企业应用实战》

    ylbtech-图书-技术-SpringBoot:<Spring Boot2 + Thymeleaf 企业应用实战> <Spring Boot 2+Thymeleaf企业应用实战&g ...

  9. Spring Boot入门(四):开发Web Api接口常用注解总结

    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...

随机推荐

  1. Django测试环境环境配置

    安装Django 在cmd的管理者模式下进入Python的安装目录 敲入命令:pip install Django -看到如下的信息表示成功 如果你在运行其它人写的Django系统时出现以下错误信息, ...

  2. web开发(七) JSTL标签库

    在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6432786.html>,在此仅供学习参考之用. 一.为什 ...

  3. Struts2-Ajax整合之纯JavaScript版本

    1.Ajax的作用:能够在不重新加载页面的情况下,用异步的方式与后台服务器进行数据交互 2.Struts2-Json的jar包(包含阿里巴巴自己的jar包) commons-beanutils-1.7 ...

  4. 阶段3 2.Spring_02.程序间耦合_4 曾经代码中的问题分析

    创建新的项目 修改打成jar包 创建一个接口 用来模拟保存的方法 创建接口的实现类 我们没有IAccountDao这个类.那么就需要去创建Iaccountdao IAccountDao接口的创建 创建 ...

  5. 解决kubeadm部署kubernetes集群镜像问题

    kubeadm 是kubernetes 的集群安装工具,能够快速安装kubernetes 集群.kubeadm init 命令默认使用的docker镜像仓库为k8s.gcr.io,国内无法直接访问,需 ...

  6. 嵌套的JsonObject与JSONArray的取值---JSON中嵌套JSONArray

    在复杂的JSON数据的格式中,往往会对JSON数据进行嵌套,这样取值会比之前的取值稍微复杂一点,但是只要思路清晰,其实取法还是一样的.就跟if else语句一样,如果if中套if,if中再套if,写的 ...

  7. 如图 honehoneclock

    如图人体时钟  honehoneclock 页面演示来自http://chabudai.org/blog/?p=59 <embed name="honehoneclock" ...

  8. java:LeakFilling(Springmvc)

    1.后台可以同时多个对象接收前端页面的值:(如图两个都打印了) 2.参数绑定的注解,通过该注解可以解决参数名称与controller中形参名称不一致的问题: @RequestParam(name=&q ...

  9. eureka配置参数

    org.springframework.cloud.netflix.eureka.EurekaClientConfigBean 参数名称 说明 默认值 eureka.client.enabled 用于 ...

  10. [转帖]linux /proc目录下的文件为何无法用vi编辑保存

    linux /proc目录下的文件为何无法用vi编辑保存 https://blog.51cto.com/xlogin/1216914 学习一下 之前看过书 这一点 没太仔细看.. xlogin关注8人 ...