Spring MVC中控制器接受参数的类方式有以下几种:

  • 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况;
  • pojo类型:如果前端传的是一个pojo对象,只要保证参数名称和pojo属性一致即可;
  • 注解方式:当前端参数名和控制器名称不一致时可以使用注解方式,比如前端是param_id,而控制器中是paramId的情况;
  • URL方式:当前端以restful格式传递参数时,后台使用这种方式接受;
  • JSON方式:前后端如果用json方式交互时,可以使用这种方式,这是常用的方式;
  • 列表方式:如果前端传的是一个列表,列表元素可以是基本类型也可以是引用类型,使用这种方式接受;
  • 表单序列化方式:有时候如果表单数据较少,控制器可以用这种方式接受表单序列化后的数据;

以上七中类型,我将一一进行总结,这几种方式花了我一天时间测试调试,真实醉了,看着简单,实践起来总会出现你意想不到的问题,所以还是能动手就不吵吵!

下面是我创建的页面,包含了八种方式(注意⚠️:上面说的七种中,列表方式根据元素类型分成了基本类型和引用类型)

以上八种方式,我将一一进行介绍,举出实例,本文介绍控制器接受简单参数类型的方式。

这种方式要求http传递的参数名称和控制器中的参数名称一致,这样不需要注解就能获取了。下面举实例,场景是这样的:

在上图简单参数传递中输入名称和描述点击提交按钮之后进入一个新的页面,在这个页面获取到刚才传过来的参数。参数传递的过程为:

1⃣️点击提交按钮之后表单提交给对应的控制器;

2⃣️控制器接受参数,并将参数渲染到对应的视图中;

3⃣️显示渲染后的页面;

这三个步骤需要两个页面和一个控制器,下面直接贴代码:

1、输入参数页面

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <%
 8     String root = request.getContextPath();
 9     String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
10             + root + "/";
11 %>
12 <script type="text/javascript"
13     src="<%=basePath%>jslib/jquery-1.8.3.min.js"></script>
14 <script type="text/javascript" src="<%=basePath%>jslib/jquery.form.js"></script>
15 <script type="text/javascript" src="<%=basePath%>js/param.js"></script>
16 <link href="<%=basePath%>css/param.css" type="text/css" rel="stylesheet">
17 <title>Insert title here</title>
18 </head>
19 <body>
20
21     <!-- 简单参数传递 -->
22     <p style="text-align: center;color: red;font-size: x-large;">Spring MVC控制器接受参数方式测试</p>
23     <div class="param">
24         <div class="simple public">
25             <p style="text-align: center;">简单参数传递</p>
26             <form id="paramForm" action="<%=basePath%>param/simpleParam"
27                 method="post">
28                 <table>
29                     <tr>
30                         <td>名称:</td>
31                         <td><input type="text" name="paramName" value=""></td>
32                     </tr>
33                     <tr>
34                         <td>描述:</td>
35                         <td><input type="text" name="paramDesc" value=""></td>
36                     </tr>
37                     <tr>
38                         <td></td>
39                         <td style="text-align: right;"><input type="submit"
40                             value="提交" id="setSimpleParam"></td>
41                     </tr>
42                 </table>
43             </form>
44         </div>
45
46 </body>
47 </html>

注意上面代码中红色加粗的部分,在spring MVC中获取引入静态资源的方式,我是这样引入的,因为如果使用相对路径会报错,找不到资源,除此之外,还要在web.xml中配置静态资源的拦截,否则引入js\css等静态资源是会报404,尽管路径没错。配置如下:

1 <servlet-mapping>
2     <servlet-name>default</servlet-name>
3     <url-pattern>*.js</url-pattern>
4 </servlet-mapping>
5
6 <servlet-mapping>
7     <servlet-name>default</servlet-name>
8     <url-pattern>*.css</url-pattern>
9 </servlet-mapping>

还可以配置图片等的路径。

2、控制器

@Controller
@RequestMapping("/param")
public class ParamController {/*** 获取简单参数:参数名称必须和表单中的name保持一致* * @param paramname* @param paramDesc* @return*/@RequestMapping(value = "simpleParam", method = RequestMethod.POST)public ModelAndView getSimpleParam(String paramName, String paramDesc) {ModelAndView mv = new ModelAndView();System.out.println(paramName);System.out.println(paramDesc);mv.addObject("paramName", paramName);mv.addObject("paramDesc", paramDesc);mv.setViewName("simpleParam");return mv;}
}

在上面的控制器中,需要注意以下两点:

  • 方法接受参数的方式是直接传参数名,这个参数名就是第一步表单中的两个参数,也就是http协议传递给后台的参数,它们必须保持一致,否则会接受失败!
  • 控制器返回的视图名称是simpleParam,所以接下来需要创建这个页面;

3、创建返回视图

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Simple Param</title>
</head>
<body><h2>获取到的参数名称:<label>${paramName }</label> <br /> 获取到的参数描述:<label>${paramDesc }</label></h2></body>
</html>

这个视图中渲染了控制器返回的数据,获取的参数名就是控制器通过addObject()方法设置的键名;

通过以上三步,就完成了简单参数的传递和接受过程,下面进行测试,在页面输入名称和描述,如下图所示:

提交之后的结果如下:

可以看到获取成功了。

4、总结

这种方式一般比较适合参数较少的情况,而且一定一定要保持控制器中的参数名和前端传递的参数名是完全一样的,这样Spring MVC才能自动映射。显然,当参数较多时,这种方式会在控制器传多个参数,显得不太好看,这个时候我们可以将这些参数封装成一个pojo对象,具体过程看下一篇文章。

转载于:https://www.cnblogs.com/hellowhy/p/9740779.html

Spring MVC(三)--控制器接受普通请求参数相关推荐

  1. Spring MVC 接收POST表单请求,获取参数总结

    2019独角兽企业重金招聘Python工程师标准>>> 前段时间遇到一个问题,在spring mvc 服务端接收post请求时,通过html 表单提交的时候,服务端能够接收到参数的值 ...

  2. 用于MyBatis CRUD操作的Spring MVC 3控制器

    到目前为止,我们已经为域类" User "创建了CRUD数据库服务,并且还将MyBatis配置与Spring Configuration文件集成在一起. 接下来,我们将使用Spri ...

  3. Spring MVC Controller 的同一个 URL 请求,根据逻辑判断返回 JSON 或者 HTML 视图

    为什么80%的码农都做不了架构师?>>>    需求 有这样一个需求,用户注册时,对于浏览器终端和非浏览器终端发起的 HTTP 请求,都走同一个 URL:/user/register ...

  4. Spring MVC自定义类型转换器Converter、参数解析器HandlerMethodArgumentResolver

    文章目录 一.前言 二.类型转换器Converter 1.自定义类型转换器 三.参数解析器 1.自定义分页参数解析器 2.自定义注解参数解析器 一.前言 Spring MVC源码分析相关文章已出: S ...

  5. SSM框架之Spring MVC(三)http响应、文件上传

    一.响应数据和结果视图 1.1 返回值分类 1.1.1 字符串 创建实体类和controller类 实体类User package cn.xiaomifeng1010.domain;import ja ...

  6. spring页面使用注解@RequestParam把请求参数封装到map中

    spring页面请求参数封装到map中 1.使用注解@RequestParam : /*** 查询全部[对应企业的全部]* @return*/@RequestMapping(value="/ ...

  7. Spring MVC框架中关于限制请求方式

    在Spring MVC框架中,@RequestMapping注解的主要作用是配置请求路径,除此以外,还可以配置请求方式,例如: @RequestMapping(value = "/add-n ...

  8. 精尽Spring MVC源码分析 - 一个请求的旅行过程

    我们先来了解一个请求是如何被 Spring MVC 处理的,由于整个流程涉及到的代码非常多,所以本文的重点在于解析整体的流程,主要讲解 DispatcherServlet 这个核心类,弄懂了这个流程后 ...

  9. Spring MVC的GET与POST请求url-pattern坑

    一.坑现象复现 1.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns ...

最新文章

  1. [置顶] 也论百度轻应用--一个开发者的吐槽
  2. 怎样使用计算机上的高级共享设置密码,win7系统电脑,如何设置共享,共享计算机的用户名和密码怎样设置...
  3. 接口之用例编写、验证
  4. 想被千年后的人知道吗,快去GitHub上传代码吧!
  5. AngularJS-compareDirective.js 验证指令
  6. Android Studio for Experts(Android Dev Summit2015)
  7. 【PostgreSQL-9.6.3】函数(2)--字符型函数
  8. python3中文乱码解决方法
  9. java怎么设计一个系统吗_谁能帮我设计一个Java的文件管理系统谢谢各位
  10. hasLayout与Block Formatting Context(块格式化上下文)
  11. 实体映射最强工具类:MapStruct 真香!
  12. html如何让单元格超链接,怎样使超链接引用单元格时,显示引用的单元格 – 手机爱问...
  13. 十进制和二进制相互转换
  14. unity LineRender结合多点触摸 实现拖拽 重复画线
  15. 微信小程序常见问题记录
  16. win10开机的微软服务器,部分 Win10 Edge 浏览器开机自动启动,微软确认是 bug
  17. PYGAME初学笔记(pygame的导入)
  18. 贪玩蓝月服务器维护需多少时间,贪玩蓝月合区维护一次多久 | 手游网游页游攻略大全...
  19. ubuntu 16.04升级python3后software updater打开错误
  20. STM32F407学习笔记——MG90S舵机模块(基本控制)

热门文章

  1. JQuery学习使用笔记 -- JQuery插件开发
  2. 批量解锁源代码管理器的文件命
  3. Altera之VIP TPG学习笔记
  4. win7乱码 字符集解决方案
  5. 安装 archlinux 之使用 EFI/GPT
  6. select下拉框美化
  7. 一个自动完成插件的类(TextBox 版)
  8. Docker系列06—基于容器制作镜像并上传到Docker Registry
  9. MongoDB 分布式部署教程
  10. jQuery EasyUI Datagrid组件的完整的基础DOM结构