关键注解

springmvc的关键注解主要有@Controller/@RequestMapping/@RequestParam/@PathVariable/@RequestHeader/@CookieValue/@SessionAttributes/@ModelAttribute
其中@Controller主要是用于标记该类是一个控制器,@RequestMapping用于指示spring的哪一个类或方法来处理请求动作,即用于标识具体的处理器。

Model/ModelAndView和ModelMap的区分

每个请求处理方法可以有多个不同类型的参数,可以出现在请求处理方法中的参数类型有:HttpServletRequest/HttpServletResponse/HttpSession/WebRequest/NativeWebRequest/Locale/InputStream/OutputStream/Principal/Map/Model/ModelMap/RedirectAttributes/Errors/BindingResult/SessionStatus/UriComponentsBuilder等。举例如下:若需要访问HttpSession

@RequestMapping("")
public String login(HttpSession session){....}

Model是一个Spring MVC类型,其中包含了Map对象用来存储数据,如果方法中添加了Model参数,则每次调用请求处理方法时,SpringMVC都会创建model对象,并将其作为参数传递给方法。

如何将模型数据传递给控制器和视图是Spring MVC的一项重要工作,Spring MVC主要提供了多种途径,下面分类进行介绍:
1.Model和ModelMap: Spring MVC在内部使用了一个Model接口存储数据模型数据,它的功能类似于Map接口,但是比map接口容易使用,而ModelMap接口实现了Map接口。Spring MVC在调用处理方法之前会创建一个隐含的模型对象,作为模型数据的存储容器,如果处理方法的参数有Model或ModelMap类型,则Spring MVC会将隐含模型的引用传递给这些参数,在处理方法内部,开发者就可以通过这些参数来引用模型数据,当然也可以向模型中添加新的属性。
2.ModelAndView :其和Model差不多,但是其不仅包含模型数据,还包含视图信息,可以通过ModelAndView设置其视图路径:举例如下:

@RequestMapping("")
public ModelAndView login(ModelAndView mv){mv.setViewName("视图路径");return mv;
}

参数绑定

@RequestParam举例如下:
注意:一旦使用了@RequestParam注解,就要求前台必须传递@RequestParam要求的参数,否则后台就不会响应

@RequestMapping("")
public ModelAndView login(@RequestParam("loginname") String loginname,@RequestParam("password") String password){..........
}

@PathVariable
用于获取URL中的动态参数

URL:http://localhost:8080/pathtest/1
@RequestMapping("/pathtest/{userId}")
public ModelAndView login(@PathVariable Integer userId){..........
}
//上例中userId就是动态参数

@RequestHeader
用于将请求头中的信息映射到处理方法的参数中,举例如下:

@RequestMapping("/pathtest")
public ModelAndView login(@RequestHeader("User-Agent") String userAgent){..........
}

@CookieValue
用于将请求的Cookie数据映射到功能处理的方法参数上。

@RequestMapping("/pathtest")
public ModelAndView login(@CookieValue("JSESSIONID") String sessionId){..........
}

@SessionAttribute
允许我们有选择地指定Model中哪些属性需要存储到HttpSession对象中
注意@SeesionAttribute只能声明在类上,不能声明在方法上

@Controller
@SessionAttribute('user')
public class SessionController{......}

@ModelAttribute

@ModelAttribute注解的方法,会在请求进入处理方法之前,先拦截请求,做过处理后再将请求转发给具体的处理方法,举例如下:

@Controller
public class ModelAttributeController{@ModelAttribute("loginname")public String userModel(RequestParam(loginname) String loginname){//使用@ModelAttribute注释的value属性,来指定model属性的名称,model属性的值就是方法的返回值return loginname;    }@RequestMapping("/login")public String loing1(){return "result"}
}
上例中,在请求进入login1方法之前,请求会先进入userModel方法@Controller
public class ModelAttributeController{@ModelAttributepublic String userModel(String loginname,Model model){//model中将会存储一个参数(String=loginname)return loginname;    }@RequestMapping("/login")public String loing1(Model model){return "result"}
}@Controller
public class ModelAttributeController{@ModelAttribute("username")@RequestMapping("/login")public String loing1(Model model){return "result"}
}
上述示例中,@ModelAttribute和@RequestMapping同时注释一个方法,loing1的返回值不再是视图名称,而是model的属性值,视图名称是@RequestMapping的value值“login”@Controller
public class ModelAttributeController{@ModelAttribute("user")public User userModel5(){....}@RequestMapping("/login")public String login5(@ModelAttribute("user") User user){return "result"}
}
//上例中userModel5(...)方法先于login5(...)方法调用,userModel5(...)方法会在Model中添加一个属性,key是@ModelAttribute的值“user”,value是userModel5(...)方法的返回值。 login5(...)方法中的@ModelAttribute的意思是将Model中的user属性赋值给login5(...)的方法参数。

信息转换

Spring3.0 新增加了一个重要信息转换接口HttpMessageConverter<T>,该接口负责将请求信息转换为一个对象,对象类型为T,并将转换后的对象绑定到请求方法的参数中。DispatcherServlrt默认已经装配了RequeestMappingHandlerAdapter作为HandlerAdapter组件的实现类,而HttpMessageConverter由RequestMappingHandlerAdapter使用,将请求信息转换为对象。

HttpMessageConverter接口的具体实现类有:StringHttpMessageConverter ,FormHttpMessageConverter ,XmlAwareFormHttpMessageConverter ,ResourceHttpMessageConverter ,SourceHttpMessageConverter ,ByteArrayHttpMessageConverter等。

RequestMappingHandlerAdapter可以默认已经安装了几个HttpMessageConverter,如果需要装配其他类型的HttpMessageConverter,需要自定义一个RequestMappingHandlerAdapter,举例如下:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingAdapter"><property name="messageConverter"><list><bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter">......</list></property>
</bean>

Json数据转换

如果要想使用SpringMVC处理JSON格式的数据,首先需要在RequestMappingAdapter上配置JSONX信息转换器,如下所示:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingAdapter"><property name="messageConverter"><list><bean class="org.springframework.http.converter.MappingJacksonHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html</value><value>application/json</value></list></property></bean>......</list></property>
</bean>

@Requestbody注解用于读取Request请求中的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到Controller中方法的参数上。当前台页面使用GET或POST方法提交数据时,数据编码格式由请求头的ContentType指定,可以分为以下几种情况:
1.application/x-www-form-urlencoded,这种情况可以由@RequestBody处理也可以由其他注解处理;
2.multipart/form-data,@RequestBody不能处理这种格式;
3.application/json、application/xml等格式的数据,必须使用@RequestBody来处理;

在实际开发中可以使用@RequestBody注解很方便地接收JSON格式的数据,并将其转换为对应的数据类型。@RequestBody的使用举例如下:

@Controller
public class JsonController{@RequestMapping("/json")@ResponseBodypublic Map<String,String>  testJson(@RequestBody Book  book){....}
}

spring-mvc注解相关推荐

  1. java注解式开发_JAVA语言之Spring MVC注解式开发使用详解[Java代码]

    本文主要向大家介绍了JAVA语言的Spring MVC注解式开发使用详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处 ...

  2. spring mvc(注解)上传文件的简单例子

    spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方 1.form的enctype="multipart/form-data" 这个是上传文件必须的 2.appl ...

  3. Spring MVC注解故障追踪记

    2019独角兽企业重金招聘Python工程师标准>>> Spring MVC是美团点评很多团队使用的Web框架.在基于Spring MVC的项目里,注解的使用几乎遍布在项目中的各个模 ...

  4. 【spring学习笔记】(二)Spring MVC注解配置 参数转换注解@RequestMapping@RequestParam、@PathVariable@MatrixVariable

    @TOC 介绍 在Spring MVC项目中,<\context:component-scan>配置标签还会开启@Request-Mapping.@GetMapping等映射注解功能(也就 ...

  5. Spring MVC注解、标签库、国际化

    本篇文章主要介绍自己在学习Spring MVC常用注解.标签库.国际化遇到的一些问题,分享给大家,希望对你有所帮助. 问题一:指定扫描包的位置 应该将所有控制器类都放在基本包下,并且指定该扫描包,避免 ...

  6. Spring MVC注解@Valid、@JsonSerialize、@JsonView等

    版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/yuchao2015/article/details/78695954 @Valid Spring MVC采 ...

  7. Http请求中Content-Type讲解以及在Spring MVC注解中produce和consumes配置详解

    转载自https://blog.csdn.net/shinebar/article/details/54408020 引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的 ...

  8. spring mvc注解笔记

    1.@Controller @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象.分发处理器将会扫描使用了该注解的类的方法, 并检测该方法是 ...

  9. Spring mvc 注解@ResponseBody 返回内容编码问题

    @ResponseBody 在@Controller 类方法中能够让字符串直接返回内容. 其返回处理的类是org.springframework.http.converter.StringHttpMe ...

  10. Spring mvc注解方式使用事务回滚

    项目名:1ma1ma jdbc.xml <bean  id="dataSource" class="org.apache.commons.dbcp.BasicDat ...

最新文章

  1. 工作中用到的java反射机制_(转)JAVA-反射机制的使用
  2. angular集成websocket_Angular + Websocket
  3. Celery 使用(一)
  4. BZOJ 2716 [Violet 3]天使玩偶 (CDQ分治、树状数组)
  5. SQLl中的left join、right join、inner join详解
  6. html如何设置鼠标选中状态,怎么用CSS 设置 当鼠标移动到菜单时,该按钮变色,鼠标点击后,页面停留在鼠标滑过时的状态!!很急!...
  7. 陈常青老师的讲座的笔记
  8. 深入理解Java虚拟机:虚拟机类加载机制
  9. hdu1385 最短路字典序
  10. 搭建自己的OwnCloud私有云
  11. HiveQL(三):修改表ALTER TABLE
  12. 台式计算机可以发射无线网络,台式电脑无线网卡怎么发射WIFI信号!
  13. 一些大牛的博客推荐,排名不分先后
  14. SSM整合练习:记账管理
  15. 南京大学计算机实验教程,南京大学 计算机系统基础 课程实验 2018(PA0-1)
  16. 弘辽科技:淘宝客户流失率高怎么办?
  17. 什么是etcd及其原理和应用场景
  18. <笔记>Long and Short -Term Recommendations with Recurrent Neural Networks
  19. transmac装黑苹果_自己安装黑苹果,安装mac简单教程,双系统轻松使用
  20. 帮百度AI干脏活累活的公司,都死了

热门文章

  1. configure: error: mcrypt.h not found. Please reins
  2. Red hat linux 下配置Java环境(jdk)
  3. pgsql 运行状态 采集脚本
  4. Linux MySQl 5.7.17 MySQL ERROR 1366(HY000):Incorrect string value 解决方法
  5. Cesium官方教程8-- 几何体和外观效果
  6. linux修改主机名+免密认证+关闭防火墙
  7. leetcode算法题解(Java版)-11-贪心大法
  8. java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
  9. fastjson过滤属性或函数
  10. 【铜】第174-9篇 一对一视频录制(九)一对多学生端删除白板及nginx下配CI