Spring MVC 中的常见注解的用法(下)

简介: Spring MVC 中的常见注解的用法

上传文件 @RequestPart


@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/upload")
    //myfile 是接收的参数名, 赋值给 file
    public String upload(@RequestPart("myfile") MultipartFile file) throws IOException {
        String path = "E:\\image\\img.png";
        //保存文件
        file.transferTo(new File(path));
        return path;
    }
}

853cf5818094e519ed8ad49c58138db7_fc3bfecebaec4822b5a9463fdf802c84.png

11ec375d561c1a2906f18f06f55c476e_c471cd4777a540dbb90b9dd4389a0e32.png


该路径下确实保存了 img.png 图片

0f9a07771ac03ce77941f8c176d5d399_efa8acda90d04e6182161e9ee9db949e.png


上面的代码写法是有问题的, 如果有很多用户都要保存文件, 那文件名就不能写死了, 必须保证每次保存的文件名都不一样, 可以使用 UUID :


@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/upload")
    public String upload(@RequestPart("myfile") MultipartFile file) throws IOException {
      //得到 UUID 并去掉 "-"
        String name = UUID.randomUUID().toString().replace("-","");
        //file.getOriginalFilename() 得到文件名
        //file.getOriginalFilename().lastIndexOf(".") 得到最后一个"."的下标
        //整个就是 name 拼接上 .后缀名
        name += file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        String path = "E:\\image\\" + name;
        //保存文件
        file.transferTo(new File(path));
        return path;
    }
}

aabb8efb7b0066c015a74835ef55cf4c_90047f21bbb1400bad79f148620cccd7.png

多次提交得到的文件 :

f36c4ecebc68cefb73f837d369edc978_3027a779ec4d45aa95798359b3ff8302.png


获取 Cookie/Session/Header


  1. 获取 Cookie
@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/get_cookie")
    public String getCookie(@CookieValue(value = "myCookie", required = false) String ck) {
        return ck;
    }
}

没有输出 :

5fc8389ea5f0b97cb0ece886d5467264_defe6c0b6bdc413ab2905ca6d8a4049e.png

通过前端构建一个 key 为 myCookie 的 cookie :

812b61bda01cea34dbb4d0bdeabf427e_1e941035f44c4a578806cc2ed770f8f2.png


  1. 获取 Session


要想获取 Session 首先要有 Session, 我们可以上传一个 Session :


@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/set_session")
    public String setSession(HttpServletRequest request) {
        HttpSession session = request.getSession();
        if(session != null) {
            session.setAttribute("SESSION_KEY","张三");
            return "session set success";
        }
        return "session set fail";
    }
    @RequestMapping("/get_session")
    public String getSession(@SessionAttribute(required = false, value = "SESSION_KEY") String name) {
        return name;
    }
}

183e0f79c5cba92a88384aaea1f5512b_b6a57595f1a541b99826840d5612eb3b.png

3606b369b66cd5d68b3b363053f6f156_30f8caf2d87d4cf2b48da43d9df6df64.png

3. 获取 Header


@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/get_header")
    public String getHeader(@RequestHeader("User-Agent") String userAgent) {
        return "UserAgent : " + userAgent;
    }
}

07ec896029390516b6dc3905f5ab22b6_0a5f125ad3de463d91abd9ac369d85b9.png

可以通过 fiddler 来抓包验证一下 :

ae7baff7f2ad779c292a8163bca49fde_634ec7f45d8e49c6b31e509384ebe280.png


3. 返回数据


默认请求下⽆论是 Spring MVC 或者是 Spring Boot 返回的都是 html 格式,如果需要返回非 html 格式数据, 就得使用 @ResponseBody 注解了, 我们之前一直使用的 @RestController 便是 @ResponseBody + @Controller 注解.


验证返回数据的默认格式 :


@Controller
public class Test {
    @RequestMapping("/b")
    public String t() {
        return "hello.html";
    }
}


因为没有这个前端页面, 所以返回出错 :


9a31eef995474cc613ec3937ae716435_e25be2dc3b8e4765800dd8f6fef32fe0.png

抓包(返回的是 html 格式) :

9ebdc7d4f5e8fce74f4a2908ca65fb5f_1bbe8f14106840de910f28216a539c50.png


在静态文件中加入 hello.html 文件 :

359591846fecf11117b518548110154b_db72229d16374ea386dae98e3f663b25.png


再次访问 :

43b38bbb5dce34e85deeaba424917c91_d97dac0f35d64dc9b7973ed832dc49d8.png


使用 @ResponseBody 返回字符串 :


@Controller
public class Test {
    @ResponseBody
    @RequestMapping("/a")
    public String t2() {
        return "hello.html";
    }
}

be056ca0bd4996f20c5bd6b9df1bd43c_5786be0219f24917a8e0b24f2762188d.png


或者使用 @RestController 也可以.


相关文章
|
5天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
1570 111
|
12天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1939 8
阿里云联动百位企业安全专家,共识Agent防御最佳实践
|
6天前
|
人工智能 程序员 API
Codex 接入 DeepSeek-V4-Flash:还能补上识图,提供两套方案
Codex 接入 DeepSeek-V4-Flash 怎么配?本文覆盖 CLI 与桌面端,再用 qwen3-vl-flash 补识图,两套方案可直接照做
|
6天前
|
编解码 人工智能 安全
2核4G/4核8G/8核16G阿里云服务器如何选择实例?经济型e、通用算力型u2i与计算型c9i选哪个?
本文介绍了阿里云2核4G、4核8G、8核16G三档主流配置下经济型e、通用算力型u2i和计算型c9i三种实例的最新活动价格与适用场景。同配置下三者价差显著,以2核4G为例,经济型e低至599.93元/年,计算型c9i则高达1742.08元/年。文章详细解析了各实例的性能定位:经济型e适合轻负载入门场景,u2i兼顾稳定算力与性价比,c9i凭借第9代至强处理器与芯片级安全能力支撑高性能业务。同时提示用户可叠加满减优惠券享受折上折,建议根据业务负载与预算综合决策。
526 112
|
18天前
|
人工智能 前端开发 Linux
Codex 桌面版安装 + CC Switch 接入第三方 API 完整教程(2026 最新)
2026最新教程:手把手教你安装Codex桌面版,通过CC Switch v3.17.0一键接入Fenno等国产API(兼容OpenAI Responses格式),跳过账号登录,完整启用代码审查、多步任务与上下文感知功能。零基础友好,全程图文实操。(239字)
2557 4
|
10天前
|
存储 人工智能 关系型数据库
阿里云AI产品与云产品最新组合套餐:Token Plan、AI coding及云服务器和建站等组合优惠价
阿里云推出全新“算力+模型+应用”一站式云与AI组合套餐活动,覆盖从个人开发者到中大型企业的全场景需求。核心亮点为分三档定价的Token Plan订阅服务,支持Qwen3.8-Max-Preview大模型调用,错峰时段最低可享0.2折优惠。活动同步推出AI Coding、智能体部署、云电脑托管、0代码建站等十余类场景化组合,搭配99元/年的普惠云服务器、88元/年的入门数据库等经典特惠产品,还为企业提供1V1定制化AI转型方案,大幅降低了不同用户群体拥抱AI的技术门槛与采购成本。
720 111
|
20天前
|
人工智能 JSON 安全
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
阿里云AI安全产品联动防御Fastjson攻击
2634 13
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
|
6天前
|
人工智能 JSON Shell
2026AI漫剧本地全开源方案(附各个软件模型链接),8G显卡也能流畅运行
这是一套完全本地化部署的AI漫剧生成技术链路:涵盖LLM剧本分镜生成、FLUX文生图(IP-Adapter人脸锁定)、StoryDiffusion时序连贯控制、LTX-2.3唇形同步视频生成,及ComfyUI全流程调度。零云端费用,仅耗硬件算力,单集2–4小时可产出竖屏短视频,适配抖音/B站分发。
|
7天前
Qoder 一周年 × Qwen3.8-Max 正式上线,多重好礼限时领
8月3日,Qwen3.8-Max 正式上线Qoder,迎来Qoder一周年。新老用户可领800次免费调用,下单再赠2000次;夜间(22:00–08:00)调用5折;邀请好友双方得积分与调用额度。
445 1

热门文章

最新文章