spring boot day(2)

一、与前端交互存在的问题

1.1 关闭spring boot项目中的spring secyrity

  • exclude = {SecurityAutoConfiguration.class
@SpringBootApplication(exclude = {
    
    SecurityAutoConfiguration.class})
//@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class HelloworldApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(HelloworldApplication.class, args);
    }

}

1.2 在后端解决跨域

  • controller类上加入@CrossOrigin(value = “http://localhost:8081”)
@CrossOrigin(value = "http://localhost:8081")
public class DogController {
    
    
......
}

1.3 读取文件

参考:读取文件方法大全

二、前后端交互

2.1 传递普通变量

  • 后端代码
 @RequestMapping("/getName")
    public String getName(){
    
    
        return "jack";
    }
  • 前端代码:
  axios({
    
    
         method:"get",
         url:'http://localhost:8080/getName',
         data:{
    
    },
         Headers:{
    
    
           " Access-Control-Allow-Origin":"*"
         }
      }).then(res=>{
    
    
         console.log(res.data)
      })

2.2 传递多种类型数据

  • 后端代码
   @RequestMapping("/getName")
    public ArrayList getName(){
    
    
      Dog wo = new Dog("kk","12",3);
      ArrayList list = new ArrayList();
      list.add("jack");
      list.add(12);
      list.add(wo);
      return list;
    }

2.3 传递结构体类型数据

  • 后端代码
 @RequestMapping("/getDogEntity")
    public Dog getDogEntity(){
    
    
        Dog dog1 = new Dog("kkk","23",3);
        return dog1;
    }
  • 前端代码
 axios({
    
    
         method:"get",
         url:'http://localhost:8080/getDogEntity',
         data:{
    
    },
         Headers:{
    
    
           " Access-Control-Allow-Origin":"*"
         }
      }).then(res=>{
    
    
         console.log(res.data)
      })

2.4 返回file类型数据

参考:spring boot优雅返回resource

 @RequestMapping("/getFile")
    public File getFile(HttpServletResponse response) {
    
    
        //当前路径是项目下的路径
        File file = new File("./src/main/resources/static/貂蝉.jpg");
        System.out.println(file.getAbsolutePath());
        System.out.println(file.exists());
        //response.setHeader("contentType", "image/jpeg");
        return file;
    }
  • 前端得到的data
    在这里插入图片描述

2.5 前端发送文件数据

axios POST提交数据的三种请求方式写法

   upload() {
    
    
      var formdate = new FormData();
      for (var i = 0; i < this.images.length; i++) {
    
    
        formdate.append("file", this.images[i]);
      }
      formdate.append("pid", "fileUpload");
      var instance = axios.create({
    
    
        baseURL: "http://localhost:8080",
        timeout: 1000,
        headers: {
    
     "Content-Type": "multipart/form-data" },
      });
      instance.post("/receiveData", formdate).then((res) => {
    
    
        console.log("发送成功");
        console.log(res)
      });
    },

2.6 后端接收前端传来的文件

  • 后端用的是:@RequestParam(“file”)
   @RequestMapping("/receiveData")
    public void getImage(@RequestParam("file") MultipartFile[] file,@RequestParam("pid") String value,HttpServletResponse response) throws IOException {
    
    
      for(int i=0;i < file.length;i++){
    
    
          System.out.println(file[i].getOriginalFilename());
          String path = "F:\\document\\java\\helloworld\\src\\main\\resources\\static\\";
          File newFile = new File(path + file[i].getOriginalFilename());
          System.out.println(newFile.getAbsolutePath());
          file[i].transferTo(newFile);
      }
        System.out.println(value);
    }

三、上传文件的细节

3.1 标签

  • type是file,即文件类型
  • multiple表示可以选择多个文件
   <input type="file" @change="change($event)" multiple="multiple">

在这里插入图片描述

3.2 change函数,$event参数

  • change函数表示选择文件时会产生相对应的事件
  • 文件对象就会在event.target.files;
  • @进行事件的绑定
change="change($event)

3.3 获取文件并打印在控制台

 change(event){
    
    
       this.images = event.target.files;
       for(var i =0;i <this.images.length;i++){
    
    
         console.log(this.images[i].name)
       }
    },

3.4 获取input中value

参考:vue三种常用获取input值写法

3.5 上传文件

  • 将文件数据添加到FormData实例对象中
  • “pid”,"fileUpload"以键值对的形式向后端发送数据,后端获取根据key获取。
  • 设置请求头: ‘Content-Type’: ‘multipart/form-data’
var formdate = new FormData()
      for(var i=0; i < this.images.length;i++){
    
    
          formdate.append(this.images[i])
      }
      formdate.append("pid","fileUpload");

3.6 前端在Data:{}(body)中传入数据,后端通过RequestBody 进行接受

  • 前端在data中添加数据
    axios({
    
    
        method:"post",
        url:"http://127.0.0.1:8080/receiveData1",
        data:{
    
    
          file:"test",
        },
      }).then(res=>{
    
    
        console.log("上传成功");
        console.log(res)
      })
  • 后端通过RequestBody接受
@RequestMapping("/receiveData1")
    public void getImage(@RequestBody Map<String, String> paras){
    
    
        System.out.println(paras.get("file"));
    }

四、前端常用功能

4.1前端页面的跳转加传参数

-页面跳转传参

    turnToSecond() {
    
    
      console.log("准备跳转到第二个页面");
      this.$router.push({
    
    
        path: "/second",
        query: {
    
    
          name: "jack",
          age: 12,
        },
      });
    },

4.2 页面跳转参数的查询

  • 页面跳转接收参数
  • 跳转页面添加的参数会展示在被跳转的页面上
    在这里插入图片描述
  • 注意:接收是this. r o u t e . q u e r y . k e y 不 是 t h i s . route.query.key不是this. route.query.keythis.router.query.key
  getParams(){
    
    
           console.log("输出")
           console.log(this.$route.query.name);
           console.log(this.$route.query.age);
       }

4.3 js的三种弹出框

alert("hahaha")
window.confirm("请按按钮");
window.prompt("sometext","defaultText");

在这里插入图片描述

4.4 返回上一页面

this.$router.go(-1)

4.5 vue中一个方法调用另一个方法

 this.$options.methods.showTime();

五、vue的细节

5.1 proxy对象

  • 比如这里得到的是代理对象,就把他看成后面代理的Array类型就行。

在这里插入图片描述

5.2 vue生命周期create(){}

  • 在create执行方法,给变量赋初值
   created(){
    
    
        this.getTxtContent()
    }

5.3 接受后端的数据,前端进行打印

<template>
    <ul v-for="item in txtContent" :key="item.id">
        <li>{
    
    {
    
    item.content}}</li>
    </ul>
</template>
<script>
import axios from 'axios'
export default {
    
    
   data(){
    
    
       return{
    
    
         txtContent:[],
         name:"jack"
       }
   },
    methods:{
    
    
        getTxtContent(){
    
    
            axios(({
    
    
                method:"get",
                url:"http://127.0.0.1:8080/getTxtContent",
            })).then(res=>{
    
    
                this.txtContent = res.data;
               // console.log(this.txtContent);
            })
        }

    },
    created(){
    
    
        this.getTxtContent()
    }
}
</script>

5.4 v-html

  • 前端代码
<template>
    <p v-html="find"></p>
</template>
<script>
import axios from 'axios'
export default {
    
    
   data(){
    
    
       return{
    
    
         txtContent:[],
         name:"jack",
         find:"",
       }
   },
    methods:{
    
    
        getTxtContent(){
    
    
            axios(({
    
    
                method:"get",
                url:"http://127.0.0.1:8080/find",
            })).then(res=>{
    
    
                this.find = res.data;
               // console.log(this.txtContent);
            })
        }

    },
    created(){
    
    
        this.getTxtContent()
    }
}
</script>
  • 后端代码
   @RequestMapping("/find")
    public String getFind(){
    
    
        return "<span style=\"color:red;\">查找</span>";
    }

六、vuex的简单使用

6.1 安装vuex

  • es6-promise也是必须的
npm install vuex --save
npm install es6-promise --sav

6.2 什么是vuex

  • 简单的说,可以把他看成所有vue组件之间的全局变量,全局方法调用点
  • Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

6.3 vue3.0中有个store目录下的index.js

  • index.js
import {
    
     createStore } from "vuex";

export default createStore({
    
    
  state(){
    
    
    return{
    
    
      Number:20
    }
  },
  mutations: {
    
    
    changeNumber(state){
    
    
       state.Number ++;
    }
  },
  actions: {
    
    },
  modules: {
    
    },
});

6.4 其他vue组件对store中变量,方法的调用

  useStore(){
    
    
      this.$store.commit("changeNumber");
      console.log(this.$store.state.Number);
    }

猜你喜欢

转载自blog.csdn.net/qq_42306803/article/details/121483353