SpringMVC---其它常用注解
常用注解
- PathVariable
@RequestMapping注解中使用占位符的情况下,需要使用@PathVariable注解指定占位符参数。即指定占位符中的值与方法中哪一个参数进行匹配。如果方法中的参数名与url中{}里面(占位符)的名字一样,则可以省略@PathVariable(“userId”)中的userId,即@ PathVariable String userId
@RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)
public String getLogin(@PathVariable("userId") String userId){
System.out.println("User Id : " + userId);
return "hello";
}
- RequestParam
在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter(“name”),另外一种是用注解@RequestParam直接获取。@RequestParam有三个属性value(参数名)、required(是否必须有该参数值)、defaultValue(默认值)。在方法中使用,如果在方法中某参数使用了该注解,那么在请求中必须包含该参数,否则不会触发。在请求中即使没有方法中注解的参数也要触发该方法,则可以通过设置required属性为false即可,默认为true。如果参数是int/boolean数据类型的值,则不传递该参数会报错,因为int/boolean类型不能赋null值。所以建议使用Integer/Boolean
public String getLogin(@RequestParam (value="userId", required=true,defaultValue=0) String userId, @RequestParam String userName){
System.out.println("User Id : " + userId);
return "hello";
}
- CookieValue
读取Cookies中的值,并且赋值给变量。有三个属性value、required、defaultValue,用法与RequestParam用法类似
- SessionAttributes
如果需要在多个请求之间共用某个数据,那么我们通常将数据保存在session中。如果希望在多个请求之间共用某个模型属性数据,则可以在控制器类标注一个@SessionAttributes,SpringMVC会将模型中对应的属性暂时保存到HttpSession中。除了使用SessionAttributes,还可以使用request.getSession()来处理session数据。
- ResponseBody
用于将Controller的方法返回的对象,通过适当的HttpMessageConverter(转换器)转换为指定格式后,写入到Response对象的body数据区,一般在返回值不是某页面时使用,如返回json、xml等时使用,使用ResponseBody将会跳过视图处理的部分。HttpMessageConverter接口负责将请求转换成一个对象,并将对象输出为响应信息,spring-mvc.xml配置文件中<mvc:annotation-driven />开启之后,会给AnnotationMethodHandlerAdapter初始化7个转换器,可以通过调用AnnotationMethodHandlerAdapter的getMessageConverts()方法来获取转换器的一个集合 List<HttpMessageConverter>
常用的转换器
| ByteArrayHttpMessageConverter | 读写二进制数据 |
| StringHttpMessageConverter | 将请求信息转换为字符串 |
| ResourceHttpMessageConverter | 读写org.springframework.core.io.Resource对象 |
| SourceHttpMessageConverter | 读写javax.xml.transform.Source类型的数据 |
| XMLAwareFormHttpMessageConverter | 处理表单中的xml数据 |
| Jaxb2RootElementHttpMessageConverter | 通过JAXB2读写XML消息,将请求消息转换到标准XmlRootElement和XmlType的注解类中 |
| MappingJacksonHttpMessageConverter | 读写JSON数据 |
后面三个分别用于处理xml数据和json数据,每次请求SpringMVC会从List<HttpMessageConverter>中挑选一个来处理数据,首先获取注册的所有HttpMessageConverter一个集合,然后会从客户的请求header中寻找客户端可接收的类型,比如application/json或者application/xml等组成一个集合,所有的HttpMessageConverter都有canRead()和canWrite()方法,返回的值都是布尔类型,看这个HttpMessageConverter是否支持当前请求的读与写,读对应的RequestBody注解,写对应的ResponseBody注解,RequestBody注解与RequestParam类似,主要用于读取请求的body数据。最后会遍历HttpMessageConverter集合,与前面获取可接受类型进行匹配,如果匹配,那么直接使用当前第一个匹配的HttpMessageConverter,然后return
例子:
在spring-mvc.xml配置
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager">
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
<bean id="marshallingHttpMessageConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter" >
<constructor-arg ref="jaxbMarshaller" />
<property name="supportedMediaTypes" value="application/xml"></property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven> <bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBound">
<list>
<value>com.jikexueyuan.demo.springmvc.model.User</value>
</list>
</property>
</bean>
通过使用ResponseBody注解,根据请求header中Accept参数值的不同,对同一地址请求分别来呈现一个实体的json与xml结果,首先在配置文件中,使用mvc:annotation-driven定义需要用到的messageConverter,这里我们用到了4个转换器,分别用来处理json数据、String数据、xml数据,在定义xml数据处理过程中需要使用Jaxb2Marshaller这个类来定义我们的实体类,比如User类,需要标明xmlRootElement注解
java中converter实现
// 使用ResponseBody注解进行标注,直接返回需要转换的对象
@ResponseBody
@RequestMapping(value="/user/{userid}", method = RequestMethod.GET)
public User queryUser(@PathVariable("userid") long userId) {
User u = new User();
u.setUnick("zhangsan");
u.setLastLoginDateTime(new Date());
return u;
}
- RequestHeader
@RequestHeader注解,可以把Request请求header部分的值绑定到方法的参数上。使用于方法参数上@RequestHeader(“Keep-Alive”) long keepAlive
header数据包括
Host localhost:8080
Accept text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language fr,en-gb;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
SpringMVC---其它常用注解的更多相关文章
- (三)SpringMVC之常用注解
SpringMVC的常用注解 注解 说明 @Controller 用于说明这个类是一个控制器 @RequestMapping 用于注释一个控制器类或者控制器类的方法 @RequestParam 用于将 ...
- SpringMVC的常用注解
在SpringMVC中常用的注解主要都是用于Controller上,所以下面的四大不同类型的注解都是根据它们处理的request的不同内容部分来区分的: 处理requ ...
- springMvc之常用注解介绍
@requestbody和@requestparam的用法 获取请求参数的方法 get请求: 直接获取request 如: public String getHtml(HttpServletR ...
- SpringMVC相关常用注解
@Controller: @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象 @RequestMapping: RequestMappin ...
- Spring和SpringMVC的常用注解
Spring的部分: 使用注解之前要开启自动扫描功能 其中base-package为需要扫描的包(含子包). <context:component-scan base-package=" ...
- springMVC的常用注解有哪些?
1.@Controller @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象.分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否 ...
- springmvc:常用注解
一.RequestParam注解 作用: 把请求中指定名称的参数给控制器中的形参赋值. 属性: value:请求参数中的名称. required:请求参数中是否必须提供此参数.默认值:true.表示必 ...
- SpringMVC框架——常用注解
@RequestMapping Spring MVC 通过 @RequestMapping 注解将请求与业务方法进行映射,在方法定义处,在类定义都可以添加该注解. 常用参数: 1.value:指定请求 ...
- SpringMVC常用注解實例詳解3:@ResponseBody
我的開發環境框架: springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...
- SpringMVC常用注解實例詳解2:@ModelAttribute
我的開發環境框架: springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...
随机推荐
- Struts2_总结
还未学习的内容,如果到时候要用到,再去学.1.Lamda 表达式(很复杂,很少用)2.验证框架(默认验证方法 validation.方法开始前验证.开始后验证)3.UI标签(用的不多)4.类型转换中的 ...
- Struts2_Action和Result总结
Action 1.实现一个Actiond的最常用方式:从ActionSupport继承2.DMI动态方法调用3.通配符配置 *{1}{2}... a) *_*4.接收参数的方法(一般用属性或者Doma ...
- PHP switch分支语句中省略break后还会执行其他case的原因分析
请分析以下PHP代码的输出结果: $a= 'dog'; switch($a) { case 'cat': echo "\$a is cat"; case 'dog': echo & ...
- Azure进阶攻略 | 应用流畅运行杜绝超载,自有一套好方法
世界上很多东西,无论交通工具.房屋建筑,甚至计算机程序,在容量方面都存在设计上的理论最大值. 比如火车,正常情况下是这样的.舒适地坐着,安静地读一本书,时不时抬头若有所思地远眺车窗外风景,满满的文艺范 ...
- VC++ MFC类库基础(55讲全)
视频保存在播音员 网盘中内容简介: 本部分是您成为VC++软件工程师必备的阶段,如果您没有任何基础,学习C++能快速让您进入编程领域,建议配合书籍<C++入门经典> 关键词: VC++.V ...
- iOS获取/删除url中的参数
1.获取URL中的某个参数: - (NSString *)getParameter:(NSString *)parameter urlStr:(NSString *)url { NSError *er ...
- 【洛谷4459】[BJOI2018] 双人猜数游戏(动态规划)
点此看题面 大致题意: 一直有两个数\(m,n\),已知\(s\le m\le n\),且\(Alice\)和\(Bob\)二个"最强大佬"各知道\(mn\)和\(m+n\).每轮 ...
- 【转】Xcode真机测试could not find developer disk image解决方法
在使用Xcode进行真机调试的时候,有时根据真机的系统不同,会出现could not find developer disk image 错误,这是由于真机系统过高或者过低,Xcode中没有匹配的配置 ...
- spring中使用i18n(国际化)
简单了解i18n i18n(其来源是英文单词internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称.在资讯领域,国际化(i18n)指让产品(出版物,软件,硬件 ...
- cudpp库使用说明
所有信息是我个人在使用过程中的小小经验,不是什么权威性文档,旨在帮助需要研究此类信息的朋友少走点弯路. 整个项目的主函数,一切从这里开始 在cudpp_testrig右键属性页里找到调试,在命令行里输 ...