SpringMVC注解@RequestParam全面解析

在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取。这里主要讲这个注解 

一、基本使用,获取提交的参数 
后端代码: 

Java代码  

  1. @RequestMapping("testRequestParam")    
  2.    public String filesUpload(@RequestParam String inputStr, HttpServletRequest request) {    
  3.     System.out.println(inputStr);  
  4.       
  5.     int inputInt = Integer.valueOf(request.getParameter("inputInt"));  
  6.     System.out.println(inputInt);  
  7.       
  8.     // ......省略  
  9.     return "index";  
  10.    }     

前端代码: 

Html代码  

  1. <form action="/gadget/testRequestParam" method="post">    
  2.      参数inputStr:<input type="text" name="inputStr">    
  3.      参数intputInt:<input type="text" name="inputInt">    
  4. </form>  

前端界面: 
 

执行结果: 
test1 
123 

可以看到spring会自动根据参数名字封装进入,我们可以直接拿这个参数名来用 

二、各种异常情况处理 
1、可以对传入参数指定参数名 

Java代码  

  1. @RequestParam String inputStr  
  2. // 下面的对传入参数指定为aa,如果前端不传aa参数名,会报错  
  3. @RequestParam(value="aa") String inputStr  

错误信息: 
HTTP Status 400 - Required String parameter 'aa' is not present 

2、可以通过required=false或者true来要求@RequestParam配置的前端参数是否一定要传 

Java代码  

  1. // required=false表示不传的话,会给参数赋值为null,required=true就是必须要有  
  2. @RequestMapping("testRequestParam")    
  3.     public String filesUpload(@RequestParam(value="aa", required=true) String inputStr, HttpServletRequest request)  

3、如果用@RequestMapping注解的参数是int基本类型,但是required=false,这时如果不传参数值会报错,因为不传值,会赋值为null给int,这个不可以 

Java代码  

  1. @RequestMapping("testRequestParam")    
  2.    public String filesUpload(@RequestParam(value="aa", required=true) String inputStr,   
  3.         @RequestParam(value="inputInt", required=false) int inputInt  
  4.         ,HttpServletRequest request) {    
  5.       
  6.     // ......省略  
  7.     return "index";  
  8.    }  

解决方法: 

    “Consider declaring it as object wrapper for the corresponding primitive type.”建议使用包装类型代替基本类型,如使用“Integer”代替“int”


另————————————————————————————————————————————————————————————————————


@MVC另外一个特性是其提取和解析请求参数的能力。让我们继续重构上面的方法,并在其中添加@RequestParam注解: 
@RequestMapping("/accounts/show") 
public void show(@RequestParam("number") String number, Map<String, Object> model) { 
    model.put("account", accountRepository.findAccount(number)); 

    这里@RequestParam注解可以用来提取名为“number”的String类型的参数,并将之作为输入参数传入。 @RequestParam支持类型转换,还有必需和可选参数。类型转换目前支持所有的基本Java类型,你可通过定制的PropertyEditors 来扩展它的范围。下面是一些例子,其中包括了必需和可选参数: 
@RequestParam(value="number", required=false) String number 
@RequestParam("id") Long id 
@RequestParam("balance") double balance 
@RequestParam double amount 

    注意,最后一个例子没有提供清晰的参数名。当且仅当代码带调试符号编译时,结果会提取名为“amount ”的参数,否则,将抛出IllegalStateException异常,因为当前的信息不足以从请求中提取参数。由于这个原因,在编码时最好显式的指定参数名。

三种写法,test(String name), 
test(@RequestParam String name), 
test(@RequestParam("userName") String name), 
第一种如果没有name 参数不会报错, 
第二种没有name 参数会报错,(也可以设置required = false), 
第三种跟第二种的区别是name 参数换为userName。

时间: 2024-12-22 00:50:10

SpringMVC注解@RequestParam全面解析的相关文章

使用springmvc注解报Forecast is not mapped

问题描述 使用springmvc注解报Forecast is not mapped 添加数据都能成功,就是查询是报错 进入query 2015-1-9 10:50:33 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet springMVC threw exception org.hibernate.hql.internal.ast.QuerySyntaxException:

spring mvc-急急急!!!springMVC 注解事务失效

问题描述 急急急!!!springMVC 注解事务失效 spring-hibernate.xml*<?xml version=""1.0"" encoding=""UTF-8""?>xmlns:context=""http://www.springframework.org/schema/context"" xmlns:p=""http://www.spr

springMVC注解开发入门程序

>>WEB.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/

springMVC中@RequestParam和@RequestBody之contentType

@RequestParam和@RequestBody是什么区别,估计很多人还是不太清楚, 因为一般用@ RequestParam就足够传入参数了,要说他们区别,就需要知道contentType是什么? Content-Type: 默认为 application/x-www-form-urlencoded编码的内容,提交方式可以是GET.POST 1.@RequestParam GET.POST:一般处理得是Content-Type: application/x-www-form-urlencod

Springmvc注解注入的简单demo

今天看了注解注入觉得确实简化了xml配置,一般情况下spring容器要成功启动的三大要件分别是:Bean定义信息,Bean实现类,以及spring本身.如果采取基于XML的配置,Bean信息和Bean实现类本身是分离的,而采用注解基于注解配置的方式,Bean定义信息通过在Bean实现类上标注注解实现,这种方式确实简化了xml配置,但是是不是某种程度增加了耦合? 常用的注解有Autowired.Resource.Qualifier.Service.Controller.Repository.Com

【转】Spring 注解学习手札(超好的springmvc注解教程)

Spring 注解学习手札(一) 构建简单Web应用 Spring 注解学习手札(二) 控制层梳理 Spring 注解学习手札(三) 表单页面处理 Spring 注解学习手札(四) 持久层浅析 Spring 注解学习手札(五) 业务层事务处理 Spring 注解学习手札(六) 测试 Spring 注解学习手札(七) 补遗--@ResponseBody,@RequestBody,@PathVariable Spring 注解学习手札(八) 补遗--@ExceptionHandler 

spring mvc注解@RequestParam

在spring mvc 的使用过程中 获取 页面传来的参数的时候,我平时都习惯  @RequestParam String name,突然有一天我发现 直接在方法参数后面写 String name , User user  也能接收到页面的值,请问写与不写区别在哪里?  答: 三种写法, test(String name), test(@RequestParam String name), test(@RequestParam("userName") String name), 第一种

SpringMVC 的 @RequestParam required 失效的问题,请教各位。

问题描述 controller部分代码如下: @RequestMapping(value = "/u/info/infoMonitorFromFriend" ) public String infoMonitorFromFriend( @RequestParam(required=false,defaultValue="",value="attid") int[] attid, //信息的属性额 1 原创 2 转发 7回复 @RequestPar

SpringMVC 文件上传配置,多文件上传,使用的MultipartFile的实例_java

基本的SpringMVC的搭建在我的上一篇文章里已经写过了,这篇文章主要说明一下如何使用SpringMVC进行表单上的文件上传以及多个文件同时上传的步骤 文件上传项目的源码下载地址:demo 一.配置文件: SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver -->