java Springboot02--Controller,文件上传,拦截器

 因为前后端分离了,所以这个项目基本用不到@controller

 

 

 

 

这句话意思:

controller只能用get接受前端的请求

@RequestMapping(value = "/hello",method = RequestMethod.GET)
@GetMapping("/hello")

这两句等价的

前段传递参数,我怎么接收呢?

 ?nickname=hy是前端传递的参数

hello里面的形参nickname需要和他保持一致,接收这个参数

 注意点:

1,传递的和接收的参数名不一致,用@requestparam注解强制绑定,但是绑定后这个参数前端就必须要传递,可以加一个参数将其设为可选的

POST请求

嗯前段要发送post请求需要一些复杂的组件,我们可以用软件模拟,这里用到apipost

 如果是json格式传输数据呢?

1. 用requestbody包起来参数

2. 传递的参数是一个类的实例,这个类的一些属性要和你传递的参数一致

@RequestMapping(value = "/postTest2",method = RequestMethod.POST)
    public String post2(@RequestBody User user){
        System.out.println(user);
        return "Post请求,接收json数据";
    }

user类:

package com.example.demo.entity;

public class User {
    private String name;
    private String password;

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}


通配符

用的不多,以后用到了解吧

2. 静态资源访问

 如何使用:比如这边有一张鼠鼠的图片,用户想通过浏览器访问到,静态资源默认斜杠后面可以访问到,即在浏览器输入

http://localhost:8080/shushu.jpg

 如果你不想在根目录下,默认是/**,可以设置虚拟映射

spring.mvc.static-path-pattern=/images/**
这是更改默认路径
spring.web.resources.static-locations=classpath:/css
这个css是自己创建的目录,classpath是类目录下,是target/classes目录下

3. 文件上传

需要前端上传文件

 

package com.example.demo.Controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;

@RestController
public class FileUploadController {
    @PostMapping("/upload")
    //这玩意儿和下面的等价
    //@RequestMapping(value = "/upload",method = RequestMethod.POST)
    public String up(String nickname, MultipartFile photo, HttpServletRequest request) throws IOException{
        System.out.println(nickname);
        System.out.println(photo.getOriginalFilename());

        System.out.println(photo.getContentType());

        String path = request.getServletContext().getRealPath("/upload/");
        //这句话的意思是获取到云端服务器的路径
        //怎么获取的:用上面那个参数HttpServletRequest request一个请求
        //request.getServletContext().getRealPath这是一个动态路径,后面的可以任意拼接
        System.out.println(path);
        saveFile(photo,path);
        return "上传成功";
    }

    public void saveFile(MultipartFile photo, String path) throws IOException{
        File dir = new File(path);
        if(!dir.exists()){
            dir.mkdir();
        }

        File file = new File(path + photo.getOriginalFilename());
        photo.transferTo(file);
        //这句话意思是把photo也就是网上那张图存储到file当中
        //那用户怎么从浏览器访问这个目录呢?配置一下那个静态资源目录即可
        //spring.web.resources.static-locations=/upload/
        //斜线就是tomcat运行的云端根目录
    }
}

配置

spring.web.resources.static-locations=/upload/
# 斜线就是tomcat运行的云端根目录

4. 拦截器

 

 

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("LoginInterceptor");
        return true;
    }
}

 配置一个config

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/user/**");
        //表示拦截哪些路径
    }
}

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

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

相关文章

kube-prometheus 使用blackbox进行icmp 监控

安装kube-prometheus 后默认在monitoring namespace中有创建 blackbox-exporter deployment。但默认没有icmp的module配置,无法执行ping探测。因为即使有icmp module,默认配置也是无法执行ping探测的(这篇文章要解决的就是这个问题&#xff0…

Syncfusion Essential Edit for WPF Crack

Syncfusion Essential Edit for WPF Crack 在任何WPF应用程序中启用语法高亮显示。 Syncfusion Essential Edit for WPF是一款具有所有基本功能的编辑器,如文本编辑、剪切、复制和粘贴。它允许用户从各种文件格式打开文件并将其保存为各种文件格式。Syncfusion Esse…

企业微信如何发起视频直播?

一、如何发起直播 1.【工作台->直播 】应用可发起; 【群聊—“”—群直播】可发起,发起直播时,支持预览直播视频,确认开始直播后则进入直播。 2.在直播应用或群聊工具中支持发起预约直播,可设置开始时间、直播时长…

opencv基础-34 图像平滑处理-2D 卷积 cv2.filter2D()

2D卷积是一种图像处理和计算机视觉中常用的操作,用于在图像上应用滤波器或卷积核,从而对图像进行特征提取、平滑处理或边缘检测等操作。 在2D卷积中,图像和卷积核都是二维的矩阵或数组。卷积操作将卷积核在图像上滑动,对每个局部区…

Qt做警告处理界面

解决的问题: 做上位机时,多有检测仪器状态,事实显示警告,错误等状态,笔者就是需要显示各种仪器状态,做显示,后做出处理逻辑 Axure设计图: 需求:更新状态,根…

EditPlus连接Linux系统远程操作文件

EditPlus是一套功能强大的文本编辑器! 1.File ->FTP->FTP Settings; 2.Add->Description->FTP server->Username->Password->Subdirectory->Advanced Options 注意:这里的Subdirectory设置的是以后上传文件的默认…

有效管理IT问题的5个原则

问题管理就是发现未知的、隐藏的问题,这是根本原因, 这是您 IT 帮助台无穷无尽的工单来源。当您实施有效的 问题管理,您的 IT 团队可以超越消防模式,专注于战略 IT 目标。以下是可以帮助您实现一流问题管理的五个原则:…

Vue电商项目--VUE插件的使用及原理

图片懒加载 图片懒加载,就是图片延迟加载。只加载页面可视区域上的图片,等滚动到页面下面时,再加载对应视口上的图片 而在vue中有一个插件 vue-lazyload - npm (npmjs.com) npm i vue-lazyload 去使用他,这里我们引入了一张图片…

C 语言的转义字符

转义字符也叫转移序列&#xff0c;包含如下&#xff1a; 转移序列 \0oo 和 \xhh 是 ASCII 码的特殊表示。 八进制数示例&#xff1a; 代码&#xff1a; #include<stdio.h> int main(void) {char beep\007;printf("%c\n",beep);return 0; }结果&#xff1a; …

移动端自动化测试实战

UI自动化测试的价值 1、提升回归测试的效率 2、可以进行兼容性测试 UI 自动化测试应用场景 • 冒烟测试自动化&#xff1a;提测之前自动断言提测质量&#xff0c;提供准入参考。 • 功能测试自动化&#xff1a;辅助 QA 与测试工程师的快速验证。 • 验收测试自动化&#xf…

linux内网穿透应用场景有哪些?快解析有什么用处?

随着网络技术的不断发展&#xff0c;无论是工作上还是在生活中人们对网络的依赖和需求越来越高。Linux内网穿透作为一种创新的解决方案&#xff0c;为我们提供了无限可能。 首先我们了解一下Linux操作系统。Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基…

字符函数、字符串函数、内存函数

目录 求字符串长度&#xff1a; size_t strlen ( const char * str ); 无长度限制的字符串函数 字符串拷贝&#xff1a; char * strcpy ( char * destination, const char * source ); 字符串追加&#xff1a; char * strcat ( char * destination, const char * source ); 字…

AR远程专家指导在汽车改装上的应用有哪些?

随着科技的不断发展&#xff0c;AR增强现实技术逐渐走进了我们的生活。加上商贸国际化&#xff0c;远程协同纵深到制造生产的更多环节&#xff0c;研发协同、工艺优化等场景复杂、跨层级、需要频繁沟通确认的流程正通过AR应用实现全面远程化的过渡&#xff0c;在汽车行业&#…

机器视觉赛道持续火热,深眸科技坚持工业AI视觉切入更多应用领域

随着深度学习等算法的突破、算力的不断提升以及海量数据的持续积累&#xff0c;人工智能逐渐从学术界向工业界落地。而机器视觉作为人工智能领域中一个正在快速发展的分支&#xff0c;广泛应用于工业制造的识别、检测、测量、定位等场景&#xff0c;相较于人眼&#xff0c;在精…

C++ 测试框架 GoogleTest 初学者入门篇 丙

断言 什么是断言&#xff1f;断言是用来对表达式执行比较的代码块&#xff0c;调用时类似函数。当表达式一致时&#xff0c;断言返回成功&#xff0c;否则失败。 googletest 的断言是一组宏定义。分为 ASSERT_* 和 EXPECT_* 两种。 比如 ASSERT_EQ(1, 2);EXPECT_EQ(1, 2);上…

MySQL主从复制——概念、原理、搭建过程

文章目录 1.主从复制概念2.主从复制原理3.主从复制结构的搭建3.1 主库配置3.2 从库配置 4.测试主从复制是否搭建成功5.主从复制的小结 DML&#xff08;data manipulation language&#xff09;是数据操纵语言&#xff1a;它们是SELECT、UPDATE、INSERT、DELETE&#xff0c;就象…

vcode开发go

配置环境变量 go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct 创建文件夹 mkdir hello cd hello go mod help go mod help 初始化一个项目 go mod init hello 获取第三方包 go get github.com/shopspring/decimal 将依赖包下载到本地 go mod …

卷积相关点

从传统的神经网络到卷积神经网络 一.传统的神经网络&#xff08;全连接网络&#xff09; 参数太多&#xff0c;冗余度高&#xff0c;容易过拟合&#xff0c;难以训练 二.卷积神经网络 1.空间平移的不变性&#xff1a;当输入的图像在空间上发生平移时&#xff0c;CNN的相应不…

信息与通信工程面试准备——专业知识提问

1.无线通信&#xff1a;依靠电磁波在空间传播以传输信息。 2.通信的目的&#xff1a;传输信息。 3.通信系统&#xff1a;将信息从信源发送到一个或多个目的地。 4.本书中通信一般指电信&#xff1a;利用电信号传输信息&#xff08;光通信属于电信&#xff0c;因为光也是一种…

[NOIP2007 普及组] 纪念品分组

[NOIP2007 普及组] 纪念品分组 题目描述 元旦快到了&#xff0c;校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均衡&#xff0c;他要把购来的纪念品根据价格进行分组&#xff0c;但每组最多只能包括两件纪念品&#xff0c; 并且…