当前位置: 首页 > news >正文

SpringBoot请求响应

简单参数

1. 原始方式获取请求参数

Controller方法形参中声明httpServletRequest对象
调用对象的getParameter参数名

@RestController
public class RequestController {@RequestMapping("/simpleParam")public String simpleParam(HttpServletRequest request){String name = request.getParameter("name");String ageStr = request.getParameter("age");int age = Integer.parseInt(ageStr);System.out.println(name+" "+age);return "OK";}}

2.SpringBoot中接受简单参数

请求参数名与方法形变量名相同
自动进行类型转换

@RestController
public class RequestController {@RequestMapping("/simpleParam")public String simpleParam(String name,Integer age){System.out.println(name+" "+age);return "OK";}}

3.RequestParam注解

如果遇到参数名称不匹配的问题,可以用@RequestParam进行映射
注意,当启用了RequestParam,你需要知道RequestParam的required属性默认是true,代表请求参数必须传递,如果不传递可能会报错
防止报错,可以将required=false;

@RestController
public class RequestController {@RequestMapping("/simpleParam2")public String simpleParam2(@RequestParam(name="name")String username, Integer age){System.out.println(username+" "+age);return "OK";}
}

测试

我测试的工具是用的Postman,走Get和Post都可以

GET,在响应头上传递参数
在这里插入图片描述

POST,在响应体上传递参数
在这里插入图片描述

实体参数

请求规则:请求参数名与形参对象属性名称保持相同,即可直接通过POJO接收。

1.简单实体对象

简单参数定义一个两个还好(比如我定义用户名、密码),但是如果针对用户信息存在比较密集的参数,可能不太容易进行响应和请求。
为了解决这个问题,可以把信息都封装到实体参数中。

首先我们需要在java中做好封装,我们在com.ztt.Pojo包下封装一个User类,其中实现好私有变量的Get和Set方法以及toString方法。

package com.ztt.Pojo;public class User {private String name;private Integer age;public void setName(String name){this.name = name;}public void setAge(Integer age){this.age = age;}public Integer getAge(){return this.age;}public String getName(){return this.name;}@Overridepublic String toString(){return "User{"+"name="+name+"age="+age;}}

在RequestController中定义好方法

import com.ztt.Pojo.User;  //记得给User引用@RestController
public class RequestController {@RequestMapping("/simplePojo")public String simplePojo(User user){System.out.println(user);return "OK";}}

调试通过
在这里插入图片描述

2.复杂实体对象

我们这个实体对象不仅有String和Integer,还引入一个address.
在这里插入图片描述
首先新建Address类,包含了私有变量city和province,以及对应的set、get和toString方法。

package com.ztt.Pojo;public class Address {private String city;private  String province;public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}@Overridepublic String toString() {return "Address{" +"city='" + city + '\'' +", province='" + province + '\'' +'}';}
}

在User类中新加入Address以及其相关的set和get方法


package com.ztt.Pojo;public class User {private String name;private Integer age;private Address address;public void setName(String name){this.name = name;}public void setAge(Integer age){this.age = age;}public Integer getAge(){return this.age;}public String getName(){return this.name;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +", address=" + address +'}';}
}

在RequestController中定义请求方法(其实和简单实体参数的请求一样、基本上不用变)

import com.ztt.Pojo.User;  //记得给User引用@RestController
public class RequestController {@RequestMapping("/complexPojo")public String complexPojo(User user){System.out.println(user);return "OK";}}

利用Postman发送请求(返回OK)
在这里插入图片描述

数组参数

使用场景:比如使用多选框进行多目标选取。
在这里插入图片描述
接收方式可以采用数组接受,也可以选择集合接受。

@RestController
public class RequestController {// 数组进行集合的封装@RequestMapping("/arrayParam")public String arrayParam(String[] hobby){System.out.println(Arrays.toString(hobby));return "OK";}// 利用集合进行参数的封装// 使用集合封装时,需要采用@RequestParam对形参定义,因为默认集合是封装到数组类型中的@RequestMapping("/listParam")public String arrayParam(@RequestParam List<String> hobby){System.out.println(hobby);return "OK";}
}

在这里插入图片描述

日期参数

由于日期记录的形式比较丰富,所以在日期参数传递的过程中,需要使用@Dat 注解进行日期参数格式转换。

import java.time.LocalDateTime;@RestController
public class RequestController {
@RequestMapping("/dateParam")public String dateParam(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){System.out.println(updateTime);return "OK";}
}

注:如果时间格式不匹配就会出现这样的错误:
Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type ‘java.lang.String’ to required type ‘java.time.LocalDateTime’; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.format.annotation.DateTimeFormat java.time.LocalDateTime] for value [2023-8-11 10:06:54]; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2023-8-11 10:06:54]]

在这里插入图片描述

JSON参数

JSON参数中JSON数据键名与形参对象属性名保持一致,定义POJO类型形参可以接受参数,同时需要使用@RequestBody标识。

@RestController
public class RequestController {@RequestMapping("/jsonParam")public String jsonParam(@RequestBody User user){System.out.println(user);return "OK";}
}

POST中数据体
{
“name”:“张三”,
“age”:10,
“address”:{
“province”:“beijing”,
“city”:“北京”
}
}

Postman中发送格式

在这里插入图片描述

路径参数

路径参数的请求直接通过URL传递参数
在java中可以通过占位符{…}来标识路径参数,通过@PathVariable获取路径参数.
使用写死的方法也可以,只不过占位符的方法更灵活一些。

@RestController
public class RequestController {// 简单参数请求@RequestMapping("/path/{id}")public String urlParam(@PathVariable Integer id){System.out.println(id);return "OK";}// 复杂参数请求@RequestMapping("/path/{id}/{name}")public String urlParam2(@PathVariable Integer id,@PathVariable String name){System.out.println(id);System.out.println(name);return "OK";}
}

请求方式可以直接在浏览器输入路径

http://localhost:8080/path/100
http://localhost:8080/path/1/Tom
(PS:用postman发送也可以)

http://www.lryc.cn/news/125962.html

相关文章:

  • 功能上新|全新GPU性能优化方案
  • 试岗第一天问题
  • 2023-08-15力扣每日一题
  • Java单例模式详解(五种实现方式)
  • 【javaweb】学习日记Day1 - HTML CSS入门
  • 贴吧照片和酷狗音乐简单爬取
  • Databend 开源周报第 106 期
  • Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
  • IL汇编ldc指令学习
  • 【Redis基础篇】浅谈分布式系统(一)
  • CSS中的calc()函数有什么作用?
  • 由浅入深学习Tapable
  • YOLOv5白皮书-第Y6周:模型改进
  • word之插入尾注+快速回到刚才编辑的地方
  • Qt扫盲-QTableView理论总结
  • 从外部访问K8s中Pod的五种方式
  • 什么是A股交易接口_(股票交易c接口)开发原理
  • STM32F4X NVIC中断概念
  • 关于consul的下载方法
  • 应用在汽车前照灯系统中的环境光传感芯片
  • Python Flask+Echarts+sklearn+MySQL(评论情感分析、用户推荐、BI报表)项目分享
  • 开源项目-高校自动排课系统
  • IP网络广播系统草坪音箱景区系统防水石头,草坪音箱的应用
  • 拒绝摆烂!C语言练习打卡第二天
  • 第四章:前端框架Vue基础入门
  • 企业权限管理(十三)-用户关联角色操作
  • 深入理解Vue 3.0x中的Suspense和异步组件
  • Ajax 笔记(三)—— Ajax 原理
  • el-tree通过default-expand-all动态控制展开/折叠
  • 基于Bsdiff差分算法的汽车OTA升级技术研究(学习)