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 也可以.


相关文章
|
6天前
|
前端开发 Java 测试技术
Java一分钟之Spring MVC:构建Web应用
【5月更文挑战第15天】Spring MVC是Spring框架的Web应用模块,基于MVC模式实现业务、数据和UI解耦。常见问题包括:配置DispatcherServlet、Controller映射错误、视图解析未设置、Model数据传递遗漏、异常处理未配置、依赖注入缺失和忽视单元测试。解决这些问题可提升代码质量和应用性能。注意配置`web.xml`、`@RequestMapping`、`ViewResolver`、`Model`、`@ExceptionHandler`、`@Autowired`,并编写测试用例。
293 3
|
4天前
|
前端开发 Java 关系型数据库
使用IDEA搭建一个Spring + AOP (权限管理 ) + Spring MVC
使用IDEA搭建一个Spring + AOP (权限管理 ) + Spring MVC
|
5天前
|
Java
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
|
6天前
|
JSON 前端开发 Java
【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解(下)
【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解
7 0
|
6天前
|
JSON 前端开发 Java
【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解(上)
【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解
7 0
|
6天前
|
存储 缓存 Java
【JavaEE】Spring中注解的方式去获取Bean对象
【JavaEE】Spring中注解的方式去获取Bean对象
3 0
|
6天前
|
存储 Java 对象存储
【JavaEE】Spring中注解的方式去存储Bean对象
【JavaEE】Spring中注解的方式去存储Bean对象
9 0
|
6天前
|
JSON 前端开发 Java
【JAVA进阶篇教学】第七篇:Spring中常用注解
【JAVA进阶篇教学】第七篇:Spring中常用注解
|
6天前
|
设计模式 前端开发 Java
初识Spring MVC
初识Spring MVC
14 0
|
6天前
|
前端开发 Java 应用服务中间件
Spring MVC框架概述
Spring MVC 是一个基于Java的轻量级Web框架,采用MVC设计模型实现请求驱动的松耦合应用开发。框架包括DispatcherServlet、HandlerMapping、Handler、HandlerAdapter、ViewResolver核心组件。DispatcherServlet协调这些组件处理HTTP请求和响应,Controller处理业务逻辑,Model封装数据,View负责渲染。通过注解@Controller、@RequestMapping等简化开发,支持RESTful请求。Spring MVC具有清晰的角色分配、Spring框架集成、多种视图技术支持以及异常处理等优点。
20 1