Springboot第三篇:与前端fetch通信(关于前端传输json数据上传文件等等前后端的处理)
关于前端接口传递的方法,推荐按以下使用:
若要在服务器上创建资源,推荐使用POST方法
若要检索某个资源,推荐使用GET方法
若要更新资源,推荐使用PUT方法
若要删除某个资源,推荐使用DELETE方法
另外本章主要讲述的是关于前后端通信关于对应性,前端为react的View,会分传递不同值有不同的处理情况。
首先关于Springboot内的代码变更都是在IndexController.java内,以下是代码:
package maven.example.controller; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("/index")
public class IndexController { @RequestMapping("/home")
public String home() {
return "Hello World!";
} }
1:传递普通类型的数据,如string
前端:
fetch('http://localhost:8080/index/name', {
method:'post',
headers: {
"Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
},
body:"firstName=zhu&lastName=yitian",
}).then(response => response.text()).then(data => {
alert(data)
}).catch(function(e){
alert("error:" + e);
})
后台:
@RequestMapping("name")
public String getName(@RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName) {
return firstName + lastName;
}
@RequestParam:用于访问 Servlet 请求参数。参数值转换为已声明的方法参数类型。
2:传递Json类型的数据,接收方为类
前端:
let temp = {};
temp.lastName = 'yitian';
temp.firstName = 'zhu';
fetch('http://localhost:8080/index/userName', {
method:'post',
headers: {
'Content-Type': 'application/json'
},
body:JSON.stringify(temp),
}).then(response => response.text()).then(data => {
alert(data)
}).catch(function(e){
alert("error:" + e);
})
后台:
IndexController.java
@RequestMapping("userName")
public String getUserName(@RequestBody User user) {
return user.getFirstName() + user.getLastName();
}
User.java
package maven.example.entity;
public class User {
private String lastName;
private String firstName;
public String getLastName(){
return lastName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
public String getFirstName(){
return firstName;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
}
3:传递Json类型的数据, 接收方为map
前端:
let temp = {};
temp.lastName = 'yitian';
temp.firstName = 'zhu';
fetch('http://localhost:8080/index/mapName', {
method:'post',
headers: {
'Content-Type': 'application/json'
},
body:JSON.stringify(temp),
}).then(response => response.text()).then(data => {
alert(data)
}).catch(function(e){
alert("error:" + e);
})
后台:
@RequestMapping("mapName")
public String getMapName(@RequestBody Map<String, String> map) {
return map.get("firstName") + map.get("lastName");
}
4. 上传单个文件或图片
前端:
<form>
<input type="file" id="picture" />
<br/>
<button type="button" onClick={this.handleFile}>上传图片</button>
</form>
handleFile(){
let picture = document.getElementById("picture").files;
let formData = new FormData();
formData.append('file', picture[0]);//这里的file要与后台@RequestParam的参数值相对应
fetch('http://localhost:8080/index/getPicture', {
method:'post',
body:formData,
}).then(response => response.text()).then(data => {
alert(data)
}).catch(function(e){
alert("error:" + e);
})
}
后台:
@RequestMapping("getPicture")
public String handleFormUpload(@RequestParam("file") MultipartFile file) {
try{
if (!file.isEmpty()) {
byte[] bytes = file.getBytes();
File picture = new File("temp.png");//这里指明上传文件保存的地址
FileOutputStream fos = new FileOutputStream(picture);
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(bytes);
bos.close();
fos.close();
return "success";
}
}catch (IOException e){
System.out.println(e);
}
return "failed";
}
5.上传多个文件或图片
前端:
<form>
<input type="file" id="picture" multiple="multiple"/>
<br/>
<button type="button" onClick={this.handleFile}>上传图片</button>
</form>
handleFile(){
let picture = document.getElementById("picture").files;
let formData = new FormData();
for (let i = 0; i < picture.length; ++i){
formData.append('file', picture[i]);
}
fetch('http://localhost:8080/index/getPictures', {
method:'post',
body:formData,
}).then(response => response.text()).then(data => {
alert(data)
}).catch(function(e){
alert("error:" + e);
})
}
后台:
@RequestMapping("getPictures")
public String handleFormsUpload(HttpServletRequest request) {
try{
List<MultipartFile>files = ((MultipartHttpServletRequest) request).getFiles("file");
MultipartFile file = null;
for(int i = 0; i < files.size(); ++i){
file = files.get(i);
if (!file.isEmpty()) {
byte[] bytes = file.getBytes();
File picture = new File("temp" + String.valueOf(i) + ".png");//这里指明上传文件保存的地址
FileOutputStream fos = new FileOutputStream(picture);
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(bytes);
bos.close();
fos.close();
}
}
return "success";
}catch (IOException e){
System.out.println(e);
}
return "failed";
}
Springboot第三篇:与前端fetch通信(关于前端传输json数据上传文件等等前后端的处理)的更多相关文章
- 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件
[源码下载] 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...
- 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- Springboot第二篇:与前端fetch通信(附springboot解决跨域方法)
说到与前端通信,明白人都知道这章肯定会写两部分的东西啦. 关于后台 ①首先回顾前文,上一章环境搭建如图: ②我们在maven.example.controller下添加一个文件,并附上如图代码: ③: ...
- SpringBoot非官方教程 | 第十七篇:上传文件
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot14-upload/ 本文出自方志朋的博客 这篇文 ...
- 第九篇:web之前端之web上传文件的方式
前端之web上传文件的方式 前端之web上传文件的方式 本节内容 web上传文件方式介绍 form上传文件 原生js实现ajax上传文件 jquery实现ajax上传文件 form+iframe构 ...
- fetch上传文件报错的问题(multipart: NextPart: EOF)
技术栈 后台: gin(golang) 前端: react+antd+dva 问题 前端这边使用fetch发送http请求的时候,后端解析formData报错: multipart: NextPart ...
- 基于spring-boot的web应用,ckeditor上传文件图片文件
说来惭愧,这个应用调试,折腾了我一整天,google了很多帖子,才算整明白,今天在这里做个记录和分享吧,也作为自己后续的参考! 第一步,ckeditor(本博文论及的ckeditor版本4.5.6)的 ...
- 三种方式上传文件-Java
前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...
- java前后分离使用fetch上传文件失败500
这次不是写什么技术要点,仅仅是记录一下 最近遇到的一个问题 背景 使用fetch向java后台上传文件时,前端调试报错500,后端的报错为multipart 无法解析,翻译过来大概是这个意思. 由于本 ...
随机推荐
- Redhat9.0+Apache1.3.29+Mysql3.23.58+PHP4.3.4
Redhat9.0+Apache1.3.29+Mysql3.23.58+PHP4.3.4 TAG标签: 摘要:红帽创建于1993年,是目前世界上最资深的Linux和开放源代码提供商,同时也是最获认可的 ...
- MySQL 授权,回收权限,查看权限
show GRANTS for root@localhost;flush privileges;SHOW PROCESSLIST; #全局授权,回收权限GRANT ALL ON *.* TO 'tes ...
- 3.3.4深度剖析ConcurrentLinkedQueue
队列.链表之类的数据结构及其常用.Java中,ArrayList和Vector都是使用数组作为其内部实现.两者最大的不同在于:Vector是线程安全的,而ArrayList不是.此外LinkedLis ...
- springboot+mongonDB
一.mongonDB基本介绍 什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. Mon ...
- 10.13DOM中document--文档1找到元素的方法,还有元素内容属性
今天讲了js的组成部分中的第二组成部分(DOM),DOM包括以下内容: window -- 窗口 ...
- ZookeeperGettingStarted
reference url: http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html#sc_FileManagement ZooKee ...
- Gym - 101498G(Super Subarray )
In this problem, subarray is defined as non-empty sequence of consecutive elements. We define a suba ...
- Digester学习笔记(二)转载
为便于理解,将笔记的内容结构作了一些调整. 对象栈 对digester技术最普通的应用,是用来动态创建一个由Java对象构成的树结构,各对象的属性以及对象间的关系,基于XML文档的内容来设置(XML文 ...
- Centos配置多个tomcat服务器,并用nginx实现负载均衡
centos配置tomcat请参见上一篇博文 :http://www.cnblogs.com/nanyangzp/p/4897655.html 一:多tomcat利用不同端口开启服务器 多个tomca ...
- 初学python - 脚本文件
解析: 第一行 #!/usr/bin/env python - py脚本运行环境[用python解释器解释脚本文件-对应python安装路径] 第二行 #-*-coding:utf-8-*- - ...