接收数据-参数绑定

#Method Arguments概观

Same in Spring WebFlux

The table below shows supported controller method arguments. Reactive types are not supported for any arguments.

下表显示支持的控制器方法参数。 任何参数都不支持反应类型。

Controller method argument

Description

WebRequest, NativeWebRequest

通用访问请求参数,请求和会话属性,不需要直接使用Servlet API。

javax.servlet.ServletRequest, javax.servlet.ServletResponse

选择任何特定的请求或响应类型 - 例如 ServletRequest,HttpServletRequest或Spring的MultipartRequest,MultipartHttpServletRequest。

javax.servlet.http.HttpSession

强制进行会话。 结果,这样的论证永远不会为空。

注意:会话访问不是线程安全的。 如果允许多个请求同时访问会话,请考虑将RequestMappingHandlerAdapter的“synchronizeOnSession”标志设置为“true”。

javax.servlet.http.PushBuilder

用于编程式HTTP / 2资源推送的Servlet 4.0 push builder API。 请注意,根据Servlet规范,如果客户端不支持HTTP / 2功能,则注入的PushBuilder实例可以为null。

java.security.Principal

Currently authenticated user; possibly a specific Principal implementation class if known.

目前已通过身份验证 如果知道的话可能是一个特定的主体实现类

HttpMethod

The HTTP method of the request.

java.util.Locale

The current request locale, determined by the most specific LocaleResolver available, in effect, the configured LocaleResolver/LocaleContextResolver.

他当前的请求语言环境,由最具体的LocaleResolver确定,实际上是配置的LocaleResolver / LocaleContextResolver。

java.util.TimeZone + java.time.ZoneId

The time zone associated with the current request, as determined by a LocaleContextResolver.

与当前请求关联的时区,由LocaleContextResolver确定

java.io.InputStream, java.io.Reader

For access to the raw request body as exposed by the Servlet API.

用于访问由Servlet API公开的原始请求主体。

java.io.OutputStream, java.io.Writer

For access to the raw response body as exposed by the Servlet API.

用于访问由Servlet API公开的原始响应主体。

@PathVariable

For access to URI template variables. See URI patterns.

用于访问URI模板变量。 请参阅URI模式。

@MatrixVariable

For access to name-value pairs in URI path segments. See Matrix variables.

用于访问URI路径段中的名称/值对。 请参阅矩阵变量。

@RequestParam

For access to Servlet request parameters. Parameter values are converted to the declared method argument type. See @RequestParam.

Note that use of @RequestParam is optional, e.g. to set its attributes. See "Any other argument" further below in this table.
用于访问Servlet请求参数。 参数值被转换为声明的方法参数类型。 请参阅@RequestParam。

请注意,使用@RequestParam是可选的,例如,
设置其属性。 请参阅本表下面的“任何其他参数”。

主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),

它有三个常用参数:

defaultValue = "0", required = false,
value = "isApp";

defaultValue 表示设置默认值,

required 铜过boolean设置是否是必须要传入的参数,

value 值表示接受的传入的参数类型。

 @RequestParam将请求的参数绑定到方法中的参数上,如下面的代码所示。其实,即使不配置该参数,注解也会默认使用该参数。如果想自定义指定参数的话,如果将@RequestParam的 required 属性设置为false(如@RequestParam(value="id",required=false))。

@RequestHeader

For access to request headers. Header
values are converted to the declared method argument type. See @RequestHeader.

用于访问请求标题。 标题值被转换为声明的方法参数类型。 请参阅@RequestHeader。

@CookieValue

For access to
cookies. Cookies values are converted to the declared method argument type.
See @CookieValue.

用于访问cookie。 Cookies值被转换为声明的方法参数类型。 请参阅@CookieValue。

@RequestBody

For access to the HTTP request body. Body
content is converted to the declared method argument type using
HttpMessageConverters. See @RequestBody.

用于访问HTTP请求主体。 使用HttpMessageConverters将主体内容转换为声明的方法参数类型。
请参阅@RequestBody。

请求的body体的绑定(通过HttpMessageConverter进行类型转换);

作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

HttpEntity<B>

For access to
request headers and body. The body is converted with HttpMessageConverters.
See HttpEntity.

用于访问请求标头和正文。 正文使用HttpMessageConverters进行转换。 请参阅HttpEntity。

@RequestPart

For access to a part in a
"multipart/form-data" request. See Multipart.

用于访问“multipart / form-data”请求中的部分。
见多部分。

java.util.Map,
org.springframework.ui.Model, org.springframework.ui.ModelMap

For access to
the model that is used in HTML controllers and exposed to templates as part
of view rendering.

用于访问HTML控制器中使用的模型,并将其作为视图渲染的一部分展示给模板。

RedirectAttributes

Specify attributes to use in case of a
redirect — i.e. to be appended to the query string, and/or flash attributes
to be stored temporarily until the request after redirect. See Redirect
attributes
and Flash
attributes
.

指定要重定向时使用的属性 - 即要追加到查询字符串,和/或临时存储的闪存属性,直到重定向后的请求。 请参阅重定向属性和Flash属性。

@ModelAttribute

For access to an
existing attribute in the model (instantiated if not present) with data
binding and validation applied. See @ModelAttribute
as well as Model
and DataBinder.

Note that use of
@ModelAttribute is optional, e.g. to set its attributes. See "Any other
argument" further below in this table.

用于访问模型中的现有属性(如果不存在,则实例化),并应用数据绑定和验证。
请参阅@ModelAttribute以及Model和DataBinder。

请注意,@ModelAttribute的使用是可选的,例如
设置其属性。 请参阅本表下面的“任何其他参数”。

Errors, BindingResult

For access to errors from validation and
data binding for a command object (i.e. @ModelAttribute argument), or errors
from the validation of an @RequestBody or @RequestPart arguments; an Errors,
or BindingResult argument must be declared immediately after the validated
method argument.

用于访问命令对象(即@ModelAttribute参数)的验证和数据绑定中的错误,或来自验证@RequestBody或@RequestPart参数的错误; 必须在验证的方法参数后立即声明Errors或BindingResult参数。

SessionStatus+class-level
@SessionAttributes

For marking form
processing complete which triggers cleanup of session attributes declared
through a class-level @SessionAttributes annotation. See @SessionAttributes
for more details.

用于标记表单处理完成,触发清理通过类级别@SessionAttributes注释声明的会话属性。 有关更多详细信息,请参阅@SessionAttributes

UriComponentsBuilder

For preparing a URL relative to the
current request’s host, port, scheme, context path, and the literal part of
the servlet mapping also taking into account Forwarded and X-Forwarded-*
headers. See URI
Links
.

用于准备相对于当前请求的主机,端口,方案,上下文路径以及servlet映射的文字部分的URL,同时也考虑了转发和X-Forwarded- *标头。 请参阅URI链接。

@SessionAttribute

For access to
any session attribute; in contrast to model attributes stored in the session
as a result of a class-level @SessionAttributes declaration. See @SessionAttribute
for more details.

用于访问任何会话属性; 与通过类级别@SessionAttributes声明存储在会话中的模型属性相反。 有关更多详细信息,请参阅@SessionAttribute。

@RequestAttribute

For access to request attributes. See @RequestAttribute
for more details.

用于访问请求属性。 有关更多详细信息,请参阅@RequestAttribute。

Any other argument

这个参数可以是任意类型,也可以是一个实体类,SpringMVC会自动封装

If a method
argument is not matched to any of the above, by default it is resolved as an
@RequestParam if it is a simple type, as determined by BeanUtils#isSimpleProperty,
or as an @ModelAttribute otherwise.

如果方法参数与上述任何一个不匹配,默认情况下,它被解析为一个@RequestParam,如果它是一个简单的类型,如BeanUtils#isSimpleProperty所确定的,或者作为@ModelAttribute来确定。

下面是具体使用说明,几乎都是下面这种格式:

Public String (@RequestParam int id){..}

注解形式

@RequestParam

@RequestParam用来接收路径后面的参数 http:www.lifeibai.com?petId = 1.

一般用来处理接收的参数和形参的参数不一致的情况

value:参数名字,即入参的请求参数名字,如value=“item_id”表示请求的参数区中的名字为item_id的参数的值将传入;

required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报;

TTP Status 400 - Required Integer parameter 'XXXX' is not
present

defaultValue:默认值,表示如果请求中没有同名参数时的默认值

@Controller

@RequestMapping("/pets")

public class EditPetForm {

// ...

@GetMapping

public String setupForm(@RequestParam("petId") int Id,
Model model) {

Pet pet = this.clinic.loadPet(petId);

model.addAttribute("pet",
pet);

return "petForm";

}

// ...

}

@RequestParam(value
= "id",defaultValue = "10",required = false)

defaultValue
表示设置默认值,

required
铜过boolean设置是否是必须要传入的参数,

value 值表示接受的传入的参数类型

使用@RequestParam常用于处理简单类型的绑定。

value:参数名字,即入参的请求参数名字,如value=“item_id”表示请求的参数区中的名字为item_id的参数的值将传入;

required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报;

TTP Status 400 -
Required Integer parameter 'XXXX' is not present

defaultValue:默认值,表示如果请求中没有同名参数时的默认值

定义如下:

public String editItem(@RequestParam(value="item_id",required=true)
String id) {

}

形参名称为id,但是这里使用value="
item_id"限定请求的参数名为item_id,所以页面传递参数的名必须为item_id。

注意:如果请求参数中没有item_id将跑出异常:

HTTP Status 500 - Required Integer
parameter 'item_id' is not present

这里通过required=true限定item_id参数为必需传递,如果不传递则报400错误,可以使用defaultvalue设置默认值,即使required=true也可以不传item_id参数值

@RequestHeader

@RequestHeader用来接收指定参数的请求头信息

@GetMapping("/demo")

public void handle(

@RequestHeader("Accept-Encoding")
String encoding,

@RequestHeader("Keep-Alive")
long keepAlive) {

//...

}

@CookieValue

用来接收指定名称的cookie的值

@GetMapping("/demo")

public void
handle(@CookieValue("JSESSIONID") String cookie) {

//...

}

@ModelAttribute

ModelAttribute可以应用在方法参数上或方法上,他的作用主要是当注解在方法参数上时会将注解的参数对象添加到Model中;

当注解在请求处理方法Action上时会将该方法变成一个非请求处理的方法,但其它Action被调用时会首先调用该方法。

被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,下面访问http:localhost:8080/test_project/test.action

@RestController

@SessionAttributes("user")

public class TestController {

 @ModelAttribute("age2")

public String mdoeltest1(){

System.out.println("This is
ModelAttribute1 !");

return "33";

}

 @ModelAttribute("age1")

public String mdoeltestrrr(){

System.out.println("This is ModelAttributee1 !");

return "22";

}

@RequestMapping("/test.action")

public String test(User user ,

  @ModelAttribute("age1") String age1
,

                       @ModelAttribute("age2")
String age2 ,

HttpSession session){

Object user2 =
session.getAttribute("user");

System.out.println(user2);

System.out.println(user);

 System.out.println("age1:"+age1);

       
System.out.println("age2:"+age2);

return "test";

}

}

结果:

This is ModelAttributee1 !

This is ModelAttribute1 !

User{name='李四', age=22}

User{name='李四', age=22}

age1:22

age2:33

@SessionAttributes

Value={“name”,“age”} 取出name或者value、或者把model中的name,age扔到session中

Type=User。Class   将一个实体类扔到session中

这个玩意加在 类上面,然后所有的方法的参数都可以在sesssion中找,找到了就赋值。

 @SessionAttributes需要清除时,使用SessionStatus.setComplete();来清除。

1、  将model中的值,扔到session中

@Controller

@SessionAttributes(types = User.class)

public class LoginController {

@RequestMapping("/login")

public String login(HttpServletRequest
req,Model model,SessionStatus status){

User user = new User();

user.setName("李四");

user.setAge(22);

model.addAttribute("user" ,
user);

return "forward:test.action";

}

}

2、  从session取出来

@RestController
@SessionAttributes("user")
public class TestController {
   
@RequestMapping("/test.action")
    public String  test(User user, HttpSession session){
        Object user2 = session.getAttribute("user");
        System.out.println(user2);
        System.out.println(user);
        return "test";
    }
}

@SessionAttribute(不能用 = =)springboot能用 - -

这玩意是加在方法上的参数的,将session中的数据赋值给参数

@RequestMapping("/")

public String
handle(@SessionAttribute User user) {

// ...

}

@RequestAttribute

这玩意是接收request域中的数据的

@GetMapping("/")

public String
handle(@RequestAttribute Client client) {

// ...

}

@RequestBody

作用:

@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json、xml等格式的数据并绑定到controller方法的参数上。

List.action?id=1&name=zhangsan&age=12

本例子应用:

@RequestBody注解实现接收http请求的json数据,将json数据转换为java对象

// 商品修改提交json信息,响应json信息

@RequestMapping("/editItemSubmit_RequestJson")

public @ResponseBody Items editItemSubmit_RequestJson(@RequestBody Items items) throws Exception {

System.out.println(items);

//itemService.saveItem(items);

return items;

}

@ResponseBody

作用:

该注解用于将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端

本例子应用:

@ResponseBody注解实现将controller方法返回对象转换为json响应给客户端

使用这个注解 ,sessionAttributes注解将会失效

@PathVariable(RESTful)

简介

@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。

用法

@RequestMapping(value="/users/{userId}/topics/{topicId}")

public String test(

@PathVariable(value="userId") int userId,

@PathVariable(value="topicId") int topicId)

如请求的URL为“控制器URL/users/123/topics/456”,则自动将URL中模板变量{userId}和{topicId}绑定到通过@PathVariable注解的同名参数上,即入参后userId=123、topicId=456。

Model/ModelMap/ModelAndView

ModelMap是Model接口的实现类,通过Model或ModelMap向页面传递数据,如下:

@RequestMapping("/itemEdit")

public
String itemEdit(Integer id, Model model)
{

Items
items = itemService.getItemById(id);

//向jsp传递数据

model.addAttribute("item",
items);

//设置跳转的jsp页面

return
"editItem";

}

/*@RequestMapping("/itemEdit")

public
String editItem(HttpServletRequest request,

HttpServletResponse
response, HttpSession session, Model model) {

//从request中取参数

String
strId = request.getParameter("id");

int
id = new Integer(strId);

//调用服务

Items
items = itemService.getItemById(id);

//把结果传递给页面

//ModelAndView modelAndView = new
ModelAndView();

              //modelAndView.addObject("item",
items);

//设置逻辑视图

//modelAndView.setViewName("editItem");

              //return
modelAndView;

//设置返回结果

model.addAttribute("item",
items);

//返回逻辑视图

return
"editItem";

}

*/

Any other argument原始参数

当请求的参数名称和处理器形参名称一致时会将请求参数与形参进行绑定。从Request取参数的方法可以进一步简化。

@RequestMapping("/itemEdit")

public
String itemEdit(Integer id, Model
model) {

Items
items = itemService.getItemById(id);

//向jsp传递数据

model.addAttribute("item",
items);

//设置跳转的jsp页面

return
"editItem";

}

参数类型推荐使用包装数据类型,因为基础数据类型不可以为null

整形:Integer、int

字符串:String

单精度:Float、float

双精度:Double、double

布尔型:Boolean、boolean

说明:对于布尔类型的参数,请求的参数值为true或false。

处理方法:

public String
editItem(Model model,Integer id,Boolean status)
throws Exception

请求url:

http://localhost:8080/xxx.action?id=2&status=false

处理器形参中添加如下类型的参数处理适配器会默认识别并进行赋值。

·HttpServletRequest

通过request对象获取请求信息

HttpServletResponse

通过response处理响应信息

HttpSession

通过session对象得到session中存放的对象

s=false

springMVC-接收数据-参数绑定的更多相关文章

  1. SpringMVC介绍及参数绑定

    本节内容: SpringMVC介绍 入门程序 SpringMVC架构 SpringMVC整合MyBatis 参数绑定 SpringMVC和Struts2的区别 一.SpringMVC介绍 1. 什么是 ...

  2. SpringMVC中的参数绑定总结

    众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springm ...

  3. 【SpringMVC学习05】SpringMVC中的参数绑定总结——较乱后期准备加入 同一篇幅他人的参数绑定

    众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springm ...

  4. SpringMVC详解------参数绑定

    SpringMVC详解------参数绑定  转载于:https://blog.csdn.net/swebin/article/details/92795422 目录 1.SpringMVC 参数绑定 ...

  5. SpringMVC中的参数绑定

    SpringMVC中的参数绑定 参数绑定的定义 所谓参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller.从客户端请求key/value数据(比如ge ...

  6. [Spring MVC] - SpringMVC的各种参数绑定方式

    SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") publi ...

  7. springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例

    案例是给一个用户赋予多个权限,多个权限用其对应的主键 id 为参数,组成了 一个id数组,传给springMVC,然后springMVC传给mybatis,然后mybatis批量插入.其实类似的场景还 ...

  8. SpringMVC的各种参数绑定方式

    1. 基本数据类型(以int为例,其他类似):2. 包装类型(以Integer为例,其他类似):3. 自定义对象类型:4. 自定义复合对象类型:5. List绑定:6. Set绑定:7. Map绑定: ...

  9. springmvc的初始化参数绑定

    一.springmvc的初始化参数绑定 此种和我们之前说的类型转换非常相似,可以看作是一种类型转换 在初始化参数绑定时  重要的是参数类型 -------------------单日期的绑定 二. 配 ...

随机推荐

  1. CSU1553 Good subsequence —— 二分 + RMQ/线段树

    题目链接: http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1553 Description Give you a sequence of n n ...

  2. ios 使用json

    1.从https://github.com/stig/json-framework/中下载json框架:json-framework 2.解压下载的包,将class文件夹下的所有文件导入到当前工程下. ...

  3. Linux下抓包工具tcpdump应用详解

      TCPDUMP简介 在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一.sniffer工具首先是为网络管理员和网络程序员进行网络分析而设计的.对于网络管理人员来说 ...

  4. org.dom4j.DocumentException: null Nested exception: null解决方法

    由于最近在学习使用spring架构,经常会遇到与xml文档打交道,今天遇到了此问题,特来分享一下解决方案. 出错原因: 很明显是因为找不到文件路径.这个原因是因为我使用了*.clas.getResou ...

  5. java 内存管理机制

    垃圾收集算法 1.标记清理算法:效率不高(标记和清理过程效率都不高).会形成内存碎片 2.复制算法:把内存分为两部分,当进行回收时,把使用部分的存活对象复制到未使用部分,然后两部分内存角色互换(一个为 ...

  6. 1.1- 1.2 hive入门

    一.hive是什么 由Facebook开源用于解决海量结构化日志的数据统计: Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表, 并提供类SQL查询功能: 构建在Had ...

  7. linux中用管道实现兄弟进程通信

    1 使用fork函数创建两个子进程.在第一个子进程中发送消息到第二个子进程,第二个子进程都出来并处理. 2 在父进程中,不适用管道通信,所以什么不需要做直接关闭勒管道的两端 3 代码实现 #inclu ...

  8. Tomcat之the jre_home environment variable is not defined correctly this environment variable is need

    参考https://blog.csdn.net/qq_30507287/article/details/53981851 今天在服务器的tomcat上部署.war文件,双击startup闪退,然后在t ...

  9. TypeScript完全解读(26课时)_6.TypeScript完全解读-泛型

    6.TypeScript完全解读-泛型 创建实例ts文件generics.ts 在index.ts内引入 fill是填充数组,创建的数组的元素数是times,填充的值就是接收的value的值 这里传入 ...

  10. MySQL备份与主备配置

    MySQL备份与主备配置 数据备份类型 全量备份:备份整个数据库 增量备份:备份自上一次备份以来(增量或完全)以来变化的数据 差异备份:备份自上一次完全备份以来变化的数据 全量备份 全量备份的方法有 ...