SpringMVC_005_@RequestParam @RequestHeader @CookieValue

本文主要是介绍SpringMVC_005_@RequestParam @RequestHeader @CookieValue,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型)

A、处理requet uri 部分(这里指uri template中variable,不含queryString部分)的注解:   @PathVariable;

B、处理request header部分的注解:   @RequestHeader, @CookieValue;

C、处理request body部分的注解:@RequestParam,  @RequestBody;

D、处理attribute类型是注解: @SessionAttributes, @ModelAttribute;

1、@PathVariable

使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。

在http://blog.csdn.net/qinshijangshan/article/details/53152350其实已经讲过

package com.ack.handler;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("handler")
public class HandlerMethodTest {private static final String SUCCESS = "success";@RequestMapping("pv/{userId}/{userName}")public String pathVariableTest(@PathVariable String userName, @PathVariable int userId){System.out.println("HandlerMethodTest/pathVariableTest方法"+userId+" "+userName);return SUCCESS;}
}

/handler/pv/3/cs访问正常。如果用 /handler/pv/x/cs就会400报错。The request sent by the client was syntactically incorrect. 因为参数userId为int类型;

2 、@RequestHeader、@CookieValue

@RequestHeader 注解,可以把Request请求header部分的值绑定到方法的参数上。

package com.ack.handler;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("handler")
public class HandlerMethodTest {private static final String SUCCESS = "success";@RequestMapping(value="rmh",headers={"Accept-Language=en-US"})public String requestMappingHeaderTest(){System.out.println("HandlerMethodTest/requestMappingHeaderTest方法");return SUCCESS;}@RequestMapping("rh")public String requestHeaderTest(@RequestHeader("Accept-Language") String lang){System.out.println("HandlerMethodTest/pathHeaderTest方法" + lang);return SUCCESS;}
}

/handler/rh访问正常。/handler/rmh访问报404错误,因为当前Accept-Language=zh-CN,而不是en-US;

@RequestMapping中的headers属性来判断是否符合某请求头信息,而方法中的参数@RequestHeader是获取某请求头信息进行处理。

@CookieValue

package com.ack.handler;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("handler")
public class HandlerMethodTest {private static final String SUCCESS = "success";@RequestMapping("cv")public String cookieValueTest(@CookieValue("JSESSIONID") String sessionId){System.out.println("HandlerMethodTest/cookieValueTest方法" + sessionId);return SUCCESS;}
}

@CookieValue 把Request header中关于cookie的值绑定到方法的参数上。

3、@RequestParam

A) 常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况( String--> 简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值;

B)用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST;

C) 该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定;

package com.ack.handler;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;@Controller
@RequestMapping("handler")
public class HandlerMethodTest {private static final String SUCCESS = "success";@RequestMapping("rp")public String requestParamTest(@RequestParam(value="userId", required=false) String userId){System.out.println("HandlerMethodTest/cookieValueTest方法" + userId);return SUCCESS;}
}

/handler/rp?userId=123访问;默认required=true,必须有该参数才能访问,否则报错。HTTP Status 400 - Required String parameter 'userId' is not present

可以跟@PathVariable传值比较,@PathVariable用的Restful风格传值;

@RequestBody

该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;

它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。

因为配置有FormHttpMessageConverter,所以也可以用来处理 application/x-www-form-urlencoded的内容,处理完的结果放在一个MultiValueMap<String, String>里,这种情况在某些特殊需求下使用,详情查看FormHttpMessageConverter api

package com.ack.handler;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;@Controller
@RequestMapping("handler")
public class HandlerMethodTest {private static final String SUCCESS = "success";@RequestMapping("rb")public String requestBodyTest(@RequestBody String body){System.out.println("HandlerMethodTest/requestBodyTest方法" + body);return SUCCESS;}
}

通常用来处理不是application/x-www-form-urlencoded的内容,所以form直接提交handler/rb报400错误。The request sent by the client was syntactically incorrect.因为form默认application/x-www-form-urlencoded编码,将form的enctype改为multipart/form-data测试成功;

暂时封笔了,知识点再多,看不到实际的东西是没用的。



参考自:http://blog.csdn.net/kobejayandy/article/details/12690161





这篇关于SpringMVC_005_@RequestParam @RequestHeader @CookieValue的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119236

相关文章

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.