0. 前言

前后端菜单参数传递一直是初学时的痛点,不知道参数类型与注解到底怎么样去配合。

其实整理一下就会发现。前后端参数传递大概有这么几种情况:

常见参数数据类型:

  • 基本类型(Stirng,int等)
  • 引用数据类型(POJO等简单对象)
  • 复杂的引用数据类型(数组、集合等)

常见传参方式:

  • URL传参
  • RequestBody 传参

组合一下大概有6种常见的场景。

1. 环境准备

环境说明:

  • RESTful 风格传参
  • 前端js: jQuery.js
  • 参数格式: json格式
  • 编码格式:UTF-8

引入 jQuery, 下载地址,将下载好的jquery.min.js放到resources/static/js下面

然后在 templates 下面创建一个 parameterPassing.html作为参数传递的测试页面。添加以下代码:

  1. <head>
  2. ....
  3. <script src="/learning/js/jquery.min.js"></script>
  4. </head>

别忘了在 PageController 里面添加一个获取 parameterPassing 页面的接口

再创建一个 ParameterController 用于接收参数的controller。

这篇文章的所有代码都只在这两个文件中,如果文章中有不太详细的地方,可以下载源码看一下。

PS: 本来js是需要单独一个文件的,但是为了方便学习,这里就直接写在 html 里了。

2. GET 方式传递基本类型

最简单的一种常见,传递一个基本类型到后台。

2.1 PathVariable 注解

ParameterController:

  1. @RestController
  2. @RequestMapping("/parameter")
  3. public class ParameterController {
  4. private Logger logger = LoggerFactory.getLogger(ParameterController.class);
  5. @GetMapping("/getString/{str}")
  6. public String getString(@PathVariable(value = "str") String str){
  7. logger.info("GET 传参,传递基本类型。str:{}",str);
  8. return "收到参数:" + str;
  9. }
  10. }

ParameterPassing.html

  1. <body>
  2. <h2>测试参数传递</h2>
  3. <button id = "bt1">get传递String</button>
  4. <input id="in1" type="text">
  5. </body>
  6. <script>
  7. $("#bt1").click(
  8. function () {
  9. $.ajax(
  10. {
  11. url:"/learning/parameter/getString/"+$("#in1").val(),
  12. method:"GET",
  13. success:function (result) {
  14. alert(result);
  15. }
  16. }
  17. )
  18. }
  19. );
  20. </script>

2.2 RequestParam 注解

ParameterController

  1. @GetMapping("/getName")
  2. public String getName(@RequestParam(value = "name") String name){
  3. logger.info("GET 传参,传递基本类型。str:{}",name);
  4. return "收到参数:" + name;
  5. }

ParameterPassing.html

  1. $("#bt2").click(
  2. function () {
  3. $.ajax(
  4. {
  5. url: "/learning/parameter/getName",
  6. method: "GET",
  7. data: {
  8. name: $("#in2").val()
  9. },
  10. success: function (result) {
  11. alert(result);
  12. }
  13. }
  14. );
  15. }
  16. );
  17. //拼接url方式
  18. $("#bt3").click(
  19. function () {
  20. $.ajax(
  21. {
  22. url: "/learning/parameter/getName?name="+$("#in3").val(),
  23. method: "GET",
  24. success: function (result) {
  25. alert(result);
  26. }
  27. }
  28. );
  29. }
  30. );

注意:

PathVariable 注解的参数是直接拼接在url里的,不是放在data里的。

RequestParam 注解的参数可以放在data里,也可以拼接url,格式是 ?key=value

PS:前后端参数的key一定要一致不然会报一个”Required String parameter ‘nae’ is not present” 的错误

3. POST 方式传递基本类型

Post 方式传递基本类型与Get方式基本一样。

3.1 PathVariable 注解

ParameterController

  1. @PostMappi 大专栏  Spring Boot 学习笔记(六) 整合 RESTful 参数传递ng("/postString/{str}")
  2. public String postString(@PathVariable(value = "str") String str){
  3. logger.info("POST 传参,传递基本类型。str:{}",str);
  4. return "收到参数:" + str;
  5. }

ParameterPassing.html

  1. $("#bt4").click(
  2. function () {
  3. $.ajax(
  4. {
  5. url:"/learning/parameter/postString/"+$("#in4").val(),
  6. method:"POST",
  7. success:function (result) {
  8. alert(result);
  9. }
  10. }
  11. )
  12. }
  13. );

3.2 RequestParam 注解

ParameterController

  1. @PostMapping("/postName")
  2. public String postName(@RequestParam(value = "name") String name){
  3. logger.info("POST 传参,传递基本类型。str:{}",name);
  4. return "收到参数:" + name;
  5. }

ParameterPassing.html

  1. $("#bt5").click(
  2. function () {
  3. $.ajax(
  4. {
  5. url: "/learning/parameter/postName",
  6. method: "POST",
  7. data: {
  8. name: $("#in5").val()
  9. },
  10. success: function (result) {
  11. alert(result);
  12. }
  13. }
  14. );
  15. }
  16. );
  17. //拼接url方式
  18. $("#bt6").click(
  19. function () {
  20. $.ajax(
  21. {
  22. url: "/learning/parameter/postName?name="+$("#in6").val(),
  23. method: "POST",
  24. success: function (result) {
  25. alert(result);
  26. }
  27. }
  28. );
  29. }
  30. );

基本类型的传参方式这几种方式差不多就够用了。如果你使用的是RESTful的风格,建议使用 2.1 的格式。

4. POST 传递引用类型

PathVariable 注解不支持引用类型。

RequestParam 注解也不支持引用类型,有一种做法是将json串以String类型传递。用RequestParam 注解可以,不过需要对参数进行编码。

所以这里仅介绍下 RequestBody 注解。

ParameterController

  1. @PostMapping("/postAccount")
  2. public AccountInfo postAccount(@RequestBody AccountInfo accountInfo) {
  3. logger.info("GET 传参,传递基本类型。str:{}", accountInfo);
  4. return accountInfo;
  5. }

ParameterPassing.html

  1. $("#bt7").click(
  2. function () {
  3. var accountInfo = {
  4. accountId: 123,
  5. name: $("#in7").val(),
  6. pwd: "root",
  7. balance: 123
  8. };
  9. $.ajax(
  10. {
  11. url: "/learning/parameter/postAccount",
  12. method: "POST",
  13. data: JSON.stringify(accountInfo),
  14. contentType:"application/json",
  15. success: function (result) {
  16. alert(JSON.stringify(result));
  17. }
  18. }
  19. );
  20. }
  21. );

5. 传递数组

5.1 传递基本类型的数组

ParameterController

  1. @PostMapping("/postNames")
  2. public List<String> postNames(@RequestBody String[] names) {
  3. logger.info("GET 传参,传递基本类型。str:{}", Arrays.asList(names).toString());
  4. return Arrays.asList(names);
  5. }

ParameterPassing.html

  1. $("#bt8").click(
  2. function () {
  3. var names = ["a","b","c",$("#in8").val()];
  4. $.ajax(
  5. {
  6. url: "/learning/parameter/postNames",
  7. method: "POST",
  8. data: JSON.stringify(names),
  9. contentType:"application/json",
  10. success: function (result) {
  11. alert(JSON.stringify(result));
  12. }
  13. }
  14. );
  15. }
  16. );

5.2 传递复杂类型的集合(数组)

ParameterController

  1. @PostMapping("/postAccountList")
  2. public List<AccountInfo> postAccountList(@RequestBody List<AccountInfo> accounts) {
  3. logger.info("GET 传参,传递基本类型。str:{}", accounts.toString());
  4. return accounts;
  5. }

ParameterPassing.html

  1. $("#bt9").click(
  2. function () {
  3. var accounts = [];
  4. var accountInfo1 = {
  5. accountId: 123,
  6. name: $("#in9").val(),
  7. pwd: "root",
  8. balance: 123
  9. };
  10. accounts.push(accountInfo1);
  11. var accountInfo2 = {
  12. accountId: 123,
  13. name: $("#in9").val(),
  14. pwd: "root",
  15. balance: 123
  16. };
  17. accounts.push(accountInfo2);
  18. $.ajax(
  19. {
  20. url: "/learning/parameter/postAccountList",
  21. method: "POST",
  22. data: JSON.stringify(accounts),
  23. contentType:"application/json",
  24. success: function (result) {
  25. alert(JSON.stringify(result));
  26. }
  27. }
  28. );
  29. }
  30. );

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。未经许可不得转载!


本文链接:https://zdran.com/20180725.html

Spring Boot 学习笔记(六) 整合 RESTful 参数传递的更多相关文章

  1. Spring Boot学习笔记:整合Shiro

    Spring Boot如何和Shiro进行整合: 先自定义一个Realm继承AuthorizingRealm,并实现其中的两个方法,分别对应认证doGetAuthenticationInfo和授权do ...

  2. Spring Boot学习笔记(五)整合mybatis

    pom文件里添加依赖 <!-- 数据库需要的依赖 --> <dependency> <groupId>org.mybatis.spring.boot</gro ...

  3. Spring Boot学习笔记:整合H2数据库

    H2数据库:java语言编写的嵌入式sql数据库.可以和应用一起打包发布. H2有三种连接模式(Connection Modes): Embedded mode (local connections ...

  4. Spring Boot学习笔记(六)mybatis配置多数据源

    application.properties #数据库配置 #数据源类型 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource # ...

  5. Spring Boot学习笔记2——基本使用之最佳实践[z]

    前言 在上一篇文章Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用已经对Spring Boot的基本体系与基本使用进行了学习,本文主要目的是更加进一步的来说明对于Spring B ...

  6. Spring Boot学习笔记 - 整合Swagger2自动生成RESTful API文档

    1.添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <!--swagger2--> <dependency> <groupId>io.spr ...

  7. Spring Boot 学习笔记--整合Thymeleaf

    1.新建Spring Boot项目 添加spring-boot-starter-thymeleaf依赖 <dependency> <groupId>org.springfram ...

  8. spring boot整合jsp的那些坑(spring boot 学习笔记之三)

    Spring Boot 整合 Jsp 步骤: 1.新建一个spring boot项目 2.修改pom文件 <dependency>            <groupId>or ...

  9. Java框架spring Boot学习笔记(六):Spring Boot事务管理

    SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.

随机推荐

  1. java数目

    第一部分: Java语言篇1 <Java编程规范>星级:适合对象:初级,中级介绍:作者James Gosling(Java之父),所以这本书我觉得你怎么也得读一下.对基础讲解的很不错. 2 ...

  2. UML-领域模型-如何找到概念类

    有3个方法 方法1:对已有的重用和修改(这是最好的方法) 重用和修改现有模型.这些模型来源于之前的项目.网上的 方法2:使用分类列表 从网上搜索该领域的常见分类,或参考书籍Martin Fowler的 ...

  3. 由AnnotatedElementUtils延伸的一些所思所想

    这篇博客的两个主题: spring的AnnotatedElementUtils 个人源码阅读方法论分享 为什么要分享AnnotatedElementUtils这个类呢,这个类看起来就是一个工具类,听起 ...

  4. 启动outlook时报错:mapi无法加载信息服务msncon.dll

    今天这个Office2010 outlook搞的让人蛋疼,老是说启动outlook时报错:mapi无法加载信息服务msncon.dll. 百度了一下,如下解决方案: 安装路径为D:\NEW Windo ...

  5. 如何保存Keras模型

    我们不推荐使用pickle或cPickle来保存Keras模型 你可以使用model.save(filepath)将Keras模型和权重保存在一个HDF5文件中,该文件将包含: 模型的结构,以便重构该 ...

  6. tensorflow用法记录

    使用 embedding 变量 import tensorflow as tf import numpy as np sess = tf.InteractiveSession() M = list(' ...

  7. day54-mysql-库、表、数据操作

    . 什么是数据库 存储数据的仓库 . 什么数据: 大家所知道的都是数据.比如:你同学的名字,年龄,性别等等 . 数据库概念 .数据库服务器 .数据库管理系统 重点 .库 .表 .记录 .数据 参考画图 ...

  8. 微服务监控druid sql

    参考该文档 保存druid的监控记录 把日志保存的关系数据数据库(mysql,oracle等) 或者nosql数据库(redis,芒果db等) 保存的时候可以增加微服务名称标识好知道是哪个微服务的sq ...

  9. jmeter接口自动化测试,数据驱动玩法

    总体思路:excel管理测试数据,判断不同的接口请求方法,取登陆token值为全局变量方便后面接口调用,预期结果断言: 1.设置获取excel数据源: 2.设置取token以及设置为全局变量: 3.i ...

  10. iso镜像文件的挂载和yum库的搭建

    挂载镜像文件 1.上传镜像文件到服务器(或电脑)的某一目录下   如:(/media/rpm_pack/rhel...iso) 2.root 用户下创建镜像文件挂载目录 mkdir  /mnt/vcd ...