SpringBoot web获取请求数据

一个网站最基本的功能就是匹配请求,获取请求数据,处理请求(业务处理),请求响应,我们今天来看SpringBoot中怎么获取请求数据。

文章包含的内容如下:

  • 获取请求数据
  • 文件上传
  • 参数校验

1 获取请求数据

1.1 获取请求参数数据 @RequestParam

1.1.1 @RequestParam注解源码了解一下
    // 参数名称
@AliasFor("name")
String value() default "";
// 同上
@AliasFor("value")
String name() default "";
// 是否比传--默认比传
boolean required() default true;
// 默认值
String defaultValue() default ValueConstants.DEFAULT_NONE;
1.1.2 获取请求参数
    /*
* 设置是否比传,设置默认值
* http://localhost:8080/requestdata/withParam?name=shuaige哈
*/
@GetMapping("withParam")
public String withParam(@RequestParam(name="name",required=true)String name,
@RequestParam(name="name",required=false,defaultValue="18")String age){
return "获取的参数数据name:"+name+"age:"+age;
} /*
* 获取多条数据
* http://localhost:8080/requestdata/withParam2?name=liuawei,刘阿伟
*/
@GetMapping("withParam2")
public String withParam(@RequestParam List<String> name){
return "获取的参数数据name:"+name.toArray().toString();
}

1.2 获取路径参数数据 @PathVariable

    @GetMapping("withPath/{userId}/info")
public String withPath(@PathVariable String userId){
return "获取请求路径参数"+userId;
}

1.3 获取header数据 @RequestHeader

    @GetMapping("withHeader")
public String withHeader(@RequestHeader String token){
return "获取请求头参数"+token;
}

1.4 获取cookie数据 @CookieValue

    @GetMapping("withCookie")
public String withCookie(@CookieValue String token){
return "获取cookie参数"+token;
}

1.5 获取请求内容(body)数据 @RequestBody

GET请求没有body内容,所以不需要这个注解

    /**
* 获取字符串内容
* @param list
* @return
*/
@PostMapping("withBody1")
public String withBody1(@RequestBody String body){
return "获取请求内容数据1:"+body;
}
/**
* 获取MAP对象
* @param list
* @return
*/
@PostMapping("withBody3")
public String withBody3(@RequestBody Map<String, String> body){
return "获取请求内容数据3:"+body;
}
/**
* 获取实体
* @param list
* @return
*/
@PostMapping("withBody4")
public String withBody4(@RequestBody UserInfoModel body){
return "获取请求内容数据4:"+body;
}
/**
* 获取列表
* @param list
* @return
*/
@PostMapping("withBody6")
public String withBody6(@RequestBody List<Map<String, Object>> list){
return "获取请求内容数据6:"+list.toArray().toString();
}

1.6 获取FORM表单参数

/**
* 获取FORM表单数据 通过参数
* @param formKey1
* @param formKey2
* @return
*/
@PostMapping("withForm1")
public String withForm1(@RequestParam String formKey1,@RequestParam String formKey2){
return "获取FORM表单参数formKey1:"+formKey1+" :formKey2:"+formKey2;
} /**
* 获取FORM表单数据 通过对象
* @param userInfo
* @return
*/
@PostMapping("withForm2")
public String withForm2(@ModelAttribute UserInfoModel userInfo){
return "获取FORM表单参数:"+userInfo.toString();
}

1.7 我是BOSS,上面都是我小弟

上面的注解都是Spring把请求流的数据帮我们封装成对象,方便我们使用,所有的数据都可以从HttpServletRequest对象可以获取。

    @PostMapping("withRequest")
public String withRequest(HttpServletRequest request) throws IOException{
// 获取请求参数
request.getParameter("");
// 获取请求头
request.getHeader("");
// 获取cookie
request.getCookies();
// 获取路径信息
request.getPathInfo();
// 获取body流
request.getInputStream();
return "其实上面讲了那么多,这个才是大BOOS";
}

2 文件上传

**MultipartFile **

    /**
* @param file
* @return
* @throws IOException
*/
@PostMapping("/image")
public String uploadImage(@RequestParam MultipartFile file) throws IOException{
String contentType = file.getContentType();
if (contentType.equals(MediaType.IMAGE_JPEG_VALUE)
||contentType.equals(MediaType.IMAGE_PNG_VALUE)) {
// 获取文件流
InputStream is= file.getInputStream();
byte[] data = new byte[2048];
FileOutputStream fis = new FileOutputStream(
new File("D:\\liuawei\\springbootbucket\\resources\\upload\\"+file.getOriginalFilename()));
while(is.read(data)!=-1){
fis.write(data);
}
fis.flush();
fis.close();
is.close();
}else {
return "error";
}
return "success";
}

3 参数校验

添加参数校验框架依赖

<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version>
</dependency>
  1. 在JavaBean上面配置检验规则
    @Min(value=15,message="最小值是15")
@Max(value=130,message="最大值是130")
private int age; @Email(message="必须符合邮件地址")
private String email; @Past(message="日期是过去的日期")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date birthday; @NotBlank
private String remark;
  1. 在请求方法添加@Valid进行校验
    @GetMapping("validata")
public String validata(@Valid ValBean bean,BindingResult result){
if (result.hasErrors()) {
return "参数校验失败";
}
return "参数校验成功";
}

4 参考

https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-file-upload
https://blog.lqdev.cn/2018/07/20/springboot/chapter-eight/

源码下载 :GitHub
请求示例 :用例地址

传送门SpringBoot学习总结系列文章

作者:liuawei
链接:https://www.jianshu.com/p/1a59c923087d
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

SpringBoot web获取请求数据【转】的更多相关文章

  1. yii学习笔记(4),获取请求数据的request组件

    yii在控制器中获取请求数据需要通过request组件来完成 <?php namespace app\controllers; use yii; use yii\web\Controller; ...

  2. Flask04 后台获取请求数据、视图函数返回类型、前台接受响应数据

    1 后台获取请求数据 1.1 提出问题 前台发送请求的方式有哪些 后台如何获取这些请求的参数 1.2 前台发送请求的方式 GET.POST.AJAX 点睛:如果不指定请求方式,浏览器默认使用GET请求 ...

  3. 5.1 Request 获取请求数据的几种方法

    //获取请求头和请求数据 //请求数据(1.通过超链接 2.通过表单) //获取请求数据的时候一般来说 都要先检查 再使用 public class RequestDemo2 extends Http ...

  4. openresty 学习笔记二:获取请求数据

    openresty 学习笔记二:获取请求数据 openresty 获取POST或者GET的请求参数.这个是要用openresty 做接口必须要做的事情.这里分几种类型:GET,POST(urlenco ...

  5. java web获取请求体内容

    Java Web中如何获取请求体内容呢? 我们知道请求方式分为两种:Get,Post. /*** * Compatible with GET and POST * * @param request * ...

  6. Android学习笔记_12_网络通信之从web获取资源数据到Android

    从web获取图片信息,并显示到android的imageView控件. 一.添加网络访问权限. <uses-permission android:name="android.permi ...

  7. pyhton 从web获取json数据 保存到本地然后再读取

    从web中获取json数据直接进行处理总认为太慢.主要是从web中获取获取数据的过程有点慢. 所以就在想 假设先利用空暇时间把json数据获取并保存到本地,然后再从本地文件里读取和操作.应该就要快非常 ...

  8. 微信小程序获取请求数据

    <%@ WebHandler Language="C#" Class="CodeTest" %> using System; using Syste ...

  9. shell脚本--CGI获取请求数据(GET / POST)

    Case 1: 获取地址栏传递的参数(即通过GET方式) CGI的环境变量中有个QUERY_STRING,可以获取地址栏传递的参数,该参数可以是手动加上的,也可以是通过表单的get方式提交的,比如下面 ...

随机推荐

  1. 关于排序--sort()和qsort()使用

    一.sort()函数的使用 使用sort()函数的时候要加上头文件#include<algorithm>和using namespace std. 这个函数接收两个或者三个参数. 第一个参 ...

  2. vue:父子组件间通信,父组件调用子组件方法进行校验子组件的表单

    参考: ElementUI多个子组件表单的校验管理:https://www.jianshu.com/p/541d8b18cf95 Vue 子组件调用父组件方法总结:https://juejin.im/ ...

  3. python基础-迭代器

    1.迭代:指的是一个重复的过程,每一次重复称为一次迭代,并且每一次重复的结果 是下一次重复的初始值 2.为什么要有迭代器 对于序列类型:str list tuple 可以依赖索引来迭代取值,但是对于d ...

  4. html常用标签详解3-a标签

    a标签 1.a标签的属性 a标签属于行内元素标签,双标签<a></a> href:a标签的跳转地址 target:打开方式(_self自身:_blank:新窗口) title: ...

  5. Django-rest Framework(三)

    今天看了drf的五个组件的源码,可读性还是很高的,只是读组件的时候要注意的是 大部分的组件都是由dispatch分发出去的,所以看源码的时候一定要抓住dispatch这条主线,一步一步看下去 一. d ...

  6. 分享一个百度大牛的Python视频系列下载

    好像是百度资深大数据工程师 在录制Python视频课程讲课,包括Python基础入门.数据分析.网络爬虫.大数据处理.机器学习.推荐系统等系列,他还在不停地录制,课程感觉很不错,视频网盘分享给大家 学 ...

  7. String、StringBuffer和StringBuilder源码解析

    1.String 1.1类的定义 public final class String implements java.io.Serializable, Comparable<String> ...

  8. hbase Hfile处理原因

    Hile 内部的数据是按key排序好的,但Hfile之间数据并不能保证key的排序,也就是说对于新生成的Hfile,其内部的key并不都比老的Hfile的大,因此每次检索时,都需要在所有的Hfile中 ...

  9. Leetcode453.Minimum Moves to Equal Array Elements最小移动次数使数组元素相等

    给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次移动(注意每次移动 ...

  10. BZOJ 4554: [Tjoi2016&Heoi2016]游戏

    Time Limit: 20 Sec Memory Limit: 128 MB Submit: 951 Solved: 572 [Submit][Status][Discuss] Descriptio ...