Spring + Mybatis 企业应用实战 第3章 Sping MVC的常用注解
注解(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中的。
如下:
- @RequestMapping(value="/test2")
- public String test2(HttpServletRequest request,Model model)
- {
- request.setAttribute("att1", "val55");
- model.addAttribute("att2", "val2");
- return "test2";
- }
- <body>
- att1:${requestScope.att1}
- att2:${requestScope.att2}
- </body>
结果如下:

@RequestParam
有如下属性:
- name
- value
- required
- defaultValue
- @RequestMapping(value="/test3")
- public String test3(HttpServletRequest request,Model model,@RequestParam(value="name") String name,@RequestParam(value="age") int age )
- {
- model.addAttribute("name", name);
- model.addAttribute("age", age);
- return "test3";
- }
- <body>
- name:${requestScope.name}
- <br/>
- age:${requestScope.age}
- </body>

@PathVariable
- @RequestMapping(value="/test4/{name}")
- public String test4(HttpServletRequest request,Model model,@PathVariable String name)
- {
- model.addAttribute("name", name);
- return "test4";
- }
- <body>
- name:${requestScope.name}
- </body>

@CookieValue
@RequestHeader
@SessionAttribute
@ModelAttribute
ModelAttribute作用在方法上,会在一个Controller里的每个方法执行前都执行,目的是为了给model中增加公共数据。慎用这个功能。
ModelAttribute也可以用在一个方法参数上。表示从Model中获取属性(如果有),并会将对象放入model中给前台(如果提交的表单中没有匹配,那么就是一个new的对象,所以这个对象必须要有无参构造函数)。
从http请求中获取对象:
- public class User {
- private String name;
- private int age;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- }
- @RequestMapping(value="/test5")
- public String test5(HttpServletRequest request,Model model,@ModelAttribute User user)
- {
- return "test5";
- }
- <body>
- name:${requestScope.user.name}
- <br/>
- age:${requestScope.user.age}
- </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格式的数据;
- @Controller
- public class PersonController {
- /**
- * 查询个人信息
- *
- * @param id
- * @return
- */
- @RequestMapping(value = "/person/profile/{id}/{name}/{status}", method = RequestMethod.GET)
- public @ResponseBody
- Person porfile(@PathVariable int id, @PathVariable String name,
- @PathVariable boolean status) {
- return new Person(id, name, status);
- }
- /**
- * 登录
- *
- * @param person
- * @return
- */
- @RequestMapping(value = "/person/login", method = RequestMethod.POST)
- public @ResponseBody
- Person login(@RequestBody Person person) {
- return person;
- }
- }
@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的常用注解的更多相关文章
- Spring + Mybatis 企业应用实战 第1章 Java EE应用
Java EE应用的分层模型: Domain Object 领域对象层.就是一些pojo. DAO(data access object) 数据访问对象 Service 业务逻辑层 Controlle ...
- 《Spring + MyBatis 企业应用实战》书评
最近公司的前端用 MpVUE.JS 开发微信小程序遇到一个问题,对后端传来的富文本编辑器的标签无法进行解析.因为公司小,这个问题前端人员直接反映给老板,跟老板说,“ MpVUE.JS 无法解析富文本编 ...
- Spring +Mybatis 企业应用实战(脑图)
- spring 以及 spring mvc 中常用注解整理
spring 以及 spring mvc 中常用注解整理 @RequestMapping(映射路径) @Autowired(注入 bean 对象) 例如: @Autowired private Bas ...
- Spring MVC的常用注解(一)
概述 Spring从2.5版本开始引入注解,虽然版本不断变化,但是注解的特性一直被延续下来并不断进行扩展,这里就来记录一下Spring MVC中常用的注解,本文记录@Controller.@Reque ...
- 轻量级Java_EE企业应用实战-第5章Hibernate的基本用法-001
1. package org.crazyit.app.domain; import javax.persistence.*; /** * Description: <br/> * ��վ: ...
- Spring MVC的常用注解
一.@Controller @Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为类名称开头字母小写,你也可以自己指定. 二.@RequestMapping ...
- 图书-技术-SpringBoot:《Spring Boot2 + Thymeleaf 企业应用实战》
ylbtech-图书-技术-SpringBoot:<Spring Boot2 + Thymeleaf 企业应用实战> <Spring Boot 2+Thymeleaf企业应用实战&g ...
- Spring Boot入门(四):开发Web Api接口常用注解总结
本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...
随机推荐
- kotlin之数组
一.使用arrayOf函数定义可以存储任意值的数组 var arr1 = arrayOf(1,2,3,'a') println(arr1[3]) 二.使用arrayOfNulls函数定义数组 var ...
- WPF Prism Request Navigate activation error
其他测试项目时没有问题,但是有些项目有时候导航一直报错误! Referring the StockTraderRI, I created a popup region in my shell infB ...
- mysql主从复制架构配置
第一个mysql1.下载mysql,解压,移动解压后的目录到指定目录下. 如:mv /usr/local/src/mysql-5.1.. /usr/local/mysql 创建mysql用户, use ...
- 阶段3 2.Spring_04.Spring的常用注解_2 常用IOC注解按照作用分类
注解配置和xml的配置要实现的功能都是一样的.都是要降低程序间的耦合,只不过配置的形式不一样 打包方式改成jar 加入spring 的依赖 复制之前的代码过来 复制到我们新建的工程里 resurces ...
- Git使用手册/Git教程:git fetch 将远程仓库的分支及分支最新版本代码拉取到本地
相关文章: 关于验证是否存在ssh配置以及生成SSH Key的方法可以参照文章:Git使用手册:生成SSH Key 关于SSH Key的使用和公钥在gitHub.gitLab的配置等,请参考文章:Gi ...
- WebApi使用二进制方式上传和下载文件
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; usi ...
- 【ABAP系列】SAP ABAP OOALV 动态设置单元格可否编辑
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP OOALV 动 ...
- Unity2D RPG游戏开发日志
一.游戏构建设计 场景设计:地面的每一层用unity的TiledMap来设计,首先第一层为地面层,也就是地形的大部分区域的图块:第二层为覆盖层,如图中蓝色线圈起来的柱子的上半部分,由于玩家可以在柱子背 ...
- redis缓存与数据一致性
目录 缓存 缓存穿透 缓存雪崩(缓存失效) 缓存击穿(热点key) 缓存并发竞争(并发set) 数据一致性 缓存(双写)一致性 Redis集群(Redis-cluster)一致性原理 哨兵(Senti ...
- Windows 下 C/C++ 多线程编程入门参考范例
#include <windows.h> #include <iostream> using namespace std; DWORD WINAPI myThread(LPVO ...