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;
    }
    @Override
    public 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;
    }

    @Override
    public 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;
    }

    @Override
    public 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发送也可以)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/76206.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot概述及项目的创建使用

文章目录 一. Spring Boot概述1. 什么是Spring Boot&#xff1f;2. Spring Boot的优点 二. Spring Boot项目的创建1. 使用IDEA创建1.1. 准备工作1.2. 创建运行Spring Boot项目1.3. 进行Web交互1.4. 目录工程介绍1.5. 项目快速添加依赖1.6. 防止配置文件乱码所需的配置1.7. Spri…

Arcgis中POI找到建筑面内距离最近的标准地址通过模型构建器来实现

背景 之前写过一篇文章 Arcgis通过矢量建筑面找到POI对应的标准地址 这里面的大致思路跟本篇文章是类似的&#xff0c;不过上一篇文章有部分有瑕疵&#xff0c;就是在POI去找建筑面内的标准地址时&#xff0c;找到的虽然是建筑面内的&#xff0c;但是不一定是距离最近的&#…

C#__事件event的简单使用:工具人下楼问题

// 工具人类 namespace DownStair {delegate void DownStairDelegate(); // 定义了一个下楼委托class ToolMan{public string Name { get; set; } // 声明工具人的名字属性// public DownStairDelegate downStairDelegate null; // 初始化委托downStair为空委托// 解决方案pu…

【BASH】回顾与知识点梳理(二十七)

【BASH】回顾与知识点梳理 二十七 二十七. 磁盘配额(Quota)27.1 磁盘配额 (Quota) 的应用与实作什么是 QuotaQuota 的一般用途Quota 的使用限制Quota 的规范设定项目 27.2 一个 XFS 文件系统的 Quota 实作范例实作 Quota 流程&#xff1a;设定账号实作 Quota 流程-1&#xff1a…

iTOP-i.MX8M开发板添加USB网络设备驱动

选中支持 USB 网络设备驱动&#xff0c;如下图所示&#xff1a; [*] Device Drivers→ *- Network device support → USB Network Adapters→ {*} Multi-purpose USB Networking Framework 将光标移动到 save 保存&#xff0c;如下图所示&#xff1a; 保存到 arch/arm64/c…

springboot工程集成前端编译包,用于uni-app webView工程,解决其需独立部署带来的麻烦,场景如页面->画布->图片->pdf

前端工程 访问方式 http://127.0.0.1:8080/context/frontEnd/index放行 public class SecurityConfig extends WebSecurityConfigurerAdapter { "/frontEnd/**",SysFrontEndController import lombok.extern.slf4j.Slf4j; import nl.basjes.shaded.org.springfram…

Sentinel使用实例

不说了&#xff0c;直接上官方文档 https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md Sentinel Example 项目说明 本项目演示如何使用 Sentinel starter 完成 Spring Clo…

试岗第一天问题

1、公司的一个项目拉下来 &#xff0c;npm i 不管用显示 后面百度 使用了一个方法 虽然解决 但是在增加别的依赖不行&#xff0c;后面发现是node版本过高&#xff0c;更换node版本解决。 2、使用插件动态的使数字从0到100&#xff08;vue-animate-number插件&#xff09; 第一…

C++ 继承

1.继承的概念及定义 定义 定义格式 继承关系和访问限定符 继承基类成员访问方式的变化 1. 基类private成员在派生类中无论以什么方式继承都是不可见的。这里的不可见是指基类的私有成员还是 被继承到了派生类对象中&#xff0c;但是语法上限制派生类对象不管在类里面还是类外面…

JavaFx基础学习【四】:UI控件的通用属性

目录 前言 一、介绍 二、继承关系 三、常用通用属性 四、属性Properties 五、属性绑定 六、属性监听 七、事件驱动 八、其他章节 前言 如果你还没有看过前面的文章&#xff0c;可以通过以下链接快速前往学习&#xff1a; JavaFx基础学习【一】&#xff1a;基本认识_明…

探讨uniapp的生命周期问题

在uniapp中,生命周期函数分为应用生命周期函数、页面生命周期函数和组件生命周期函数. 1应用声明周期 应用生命周期函数只能在 App.vue 中监听有效&#xff0c;在其他页监听无效。 onLaunch&#xff1a;当uni-app 初始化完成时触发&#xff08;全局只触发一次&#xff09;on…

Jmeter性能测试系列-性能测试需求分析

性能测试需求分析 性能测试需求分析与传统的功能测试需求有所不同&#xff0c;功能测试需求分析重点在于从用户层面分析被测对象的功能性、易用性等质量特性&#xff0c;性能测试则需要从终端用户应用、系统架构设计、硬件配置等多个纬度分析系统可能存在性能瓶颈的业务。 性…

线上售楼vr全景看房成为企业数字化营销工具

在房地产业中&#xff0c;VR全景拍摄为买家提供了虚拟看房的全新体验。买家可以通过相关设备&#xff0c;远程参观各个楼盘的样板间和实景&#xff0c;感受房屋的空间布局和环境氛围&#xff0c;极大地提高了购房决策的准确性。对于房地产开发商和中介机构来说&#xff0c;VR全…

在不破坏原有隔离状态的情况下,怎么实现网间数据安全摆渡?

随着网络技术的演进&#xff0c;网络攻击、数据窃取、数据泄露事件也愈发频繁&#xff0c;给企业造成损失和负面影响&#xff0c;企业数据防泄漏治理是大趋势&#xff0c;也是自身迫切需求。 2021年1月&#xff0c;中国农业银行因存在数据泄露风险、互联网门户网站泄露敏感信息…

《起风了》C++源代码

使用方法 Visual Studio、Dev-C、Visual Studio Code等C/C创建一个 .cpp 文件&#xff0c;直接粘贴赋值即可。 #include <iostream> #include <Windows.h> #pragma comment(lib,"winmm.lib") using namespace std; enum Scale {Rest 0, C8 108, B7 …

分布式 - 服务器Nginx:一小时入门系列之代理缓冲与缓存

官方文档&#xff1a;https://nginx.org/en/docs/http/ngx_http_proxy_module.html 1. 代理缓冲 proxy_buffer 代理缓冲用于临时存储从后端服务器返回的响应数据。通过使用代理缓冲&#xff0c;Nginx可以在接收完整的响应后再将其发送给客户端&#xff0c;从而提高性能和效率…

数据挖掘全流程解析

数据挖掘全流程解析 数据指标选择 在这一阶段&#xff0c;使用直方图和柱状图的方式对数据进行分析&#xff0c;观察什么数据属性对于因变量会产生更加明显的结果。 如何绘制直方图和条形统计图 数据清洗 观察数据是否存在数据缺失或者离群点的情况。 数据异常的两种情况…

Mr. Cappuccino的第61杯咖啡——Spring之BeanPostProcessor

Spring之BeanPostProcessor 概述基本使用项目结构项目代码运行结果源代码 常用处理器项目结构项目代码执行结果 概述 BeanPostProcessor&#xff1a;Bean对象的后置处理器&#xff0c;负责对已创建好的bean对象进行加工处理&#xff1b; BeanPostProcessor中的两个核心方法&am…

React Dva项目小优化之redux-action

之前 我们讲过 models 接下啦 我们来给大家讲一个新的库 这个库的话 有最好 没有影响也不大 它主要是帮助我们处理 action的 我们直接在 GitHub 官网上搜索 redux-action 我们搜出来 第一个就是 从星数来看 还是非常优秀的 我们拉下来 找到这个Documentation 然后点击进去 进…

一、Dubbo 简介与架构

一、Dubbo 简介与架构 1.1 应用架构演进过程 单体应用&#xff1a;JEE、MVC分布式应用&#xff1a;SOA、微服务化 1.2 Dubbo 简介一种分布式 RPC 框架&#xff0c;对专业知识&#xff08;序列化/反序列化、网络、多线程、设计模式、性能优化等&#xff09;进行了更高层的抽象和…