关于前端接口传递的方法,推荐按以下使用:

若要在服务器上创建资源,推荐使用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数据上传文件等等前后端的处理)的更多相关文章

  1. 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件

    [源码下载] 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...

  2. 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)

    1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...

  3. Springboot第二篇:与前端fetch通信(附springboot解决跨域方法)

    说到与前端通信,明白人都知道这章肯定会写两部分的东西啦. 关于后台 ①首先回顾前文,上一章环境搭建如图: ②我们在maven.example.controller下添加一个文件,并附上如图代码: ③: ...

  4. SpringBoot非官方教程 | 第十七篇:上传文件

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot14-upload/ 本文出自方志朋的博客 这篇文 ...

  5. 第九篇:web之前端之web上传文件的方式

    前端之web上传文件的方式   前端之web上传文件的方式 本节内容 web上传文件方式介绍 form上传文件 原生js实现ajax上传文件 jquery实现ajax上传文件 form+iframe构 ...

  6. fetch上传文件报错的问题(multipart: NextPart: EOF)

    技术栈 后台: gin(golang) 前端: react+antd+dva 问题 前端这边使用fetch发送http请求的时候,后端解析formData报错: multipart: NextPart ...

  7. 基于spring-boot的web应用,ckeditor上传文件图片文件

    说来惭愧,这个应用调试,折腾了我一整天,google了很多帖子,才算整明白,今天在这里做个记录和分享吧,也作为自己后续的参考! 第一步,ckeditor(本博文论及的ckeditor版本4.5.6)的 ...

  8. 三种方式上传文件-Java

    前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...

  9. java前后分离使用fetch上传文件失败500

    这次不是写什么技术要点,仅仅是记录一下 最近遇到的一个问题 背景 使用fetch向java后台上传文件时,前端调试报错500,后端的报错为multipart 无法解析,翻译过来大概是这个意思. 由于本 ...

随机推荐

  1. [Groovy]获取当前活动的Environment,获取response中节点的name和节点的value

    import com.eviware.soapui.support.GroovyUtils import com.eviware.soapui.support.XmlHolder import org ...

  2. Docker for mac安装

    Mac安装Docker docker下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-mac docker for m ...

  3. [转]ubuntu linux下DNS重启后丢失(不是Network-manager造成的情况)

    从网上得知 /etc/resolv.conf中的DNS配置是从/etc/resolvconf/resolv.conf.d/head中加载而来,所以每回改resolv.conf都会失效,在此文件里面已经 ...

  4. java.awt.Graphics2D 图片缩放

    关键字:java image  thumbnail  google 粗略demo: import java.awt.Graphics2D; import java.awt.GraphicsConfig ...

  5. 编写高质量代码改善C#程序的157个建议——建议115:通过HASH来验证文件是否被篡改

    建议115:通过HASH来验证文件是否被篡改 MD5算法作为一种最通用的HASH算法,也被广泛用于文件完整性的验证上.文件通过MD5-HASH算法求值,总能得到一个固定长度的MD5值.虽说MD5是一种 ...

  6. 长时间停留在calculating requirements and dependencies

    如果安装插件的时候,Eclipse花费了很长的时间calculating requirements and dependencies(计算需求和依赖性 )这个问题通常就是在点击安装之后显示“Calcu ...

  7. 安装并使用PICT,生成测试用例

    一.PICT简介 PICT工具是在微软公司内部使用的一款承兑组合的命令行生成工具,现在已经对外提供,可以在 http://download.microsoft.com/download/f/5/5/f ...

  8. ArcGIS应用——使用Python为图斑连续编号及扩展应用

    为图斑连续编号 在GIS应用中,为图斑连续编号(编号递增)是一项常见的需求,利用ArcGIS,可以方便的实现. Python脚本如下: rec=0 def autoIncrement(): globa ...

  9. .net core i上 K8S(三)Yaml文件运行.netcore程序

    上一章我们通过kubectl run简单运行了一个.netcore网站,但实际的开发中,我们都是通过yaml来实现的. 1.编写yaml文件 关于yaml文件的格式在此就不多描述了,不熟悉的可以去网上 ...

  10. GridView中文属性

    GridControl的中文属性: 1  Appearance 外观 Appearance 外观设置 ColumnFilterButton  行过滤器按钮 BackerColor  背景色 Backe ...