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


相关文章
|
9天前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
136 73
|
4天前
|
Java Spring 容器
【SpringFramework】Spring IoC-基于注解的实现
本文主要记录基于Spring注解实现IoC容器和DI相关知识。
36 21
|
9天前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
9天前
|
Java Spring
【Spring配置】idea编码格式导致注解汉字无法保存
问题一:对于同一个项目,我们在使用idea的过程中,使用汉字注解完后,再打开该项目,汉字变成乱码问题二:本来a项目中,汉字注解调试好了,没有乱码了,但是创建出来的新的项目,写的注解又成乱码了。
|
17天前
|
设计模式 前端开发 Java
步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
通过对 `DispatcherServlet`源码的深入剖析,我们了解了SpringMVC请求处理的全流程。`DispatcherServlet`作为前端控制器,负责请求的接收和分发,处理器映射和适配负责将请求分派到具体的处理器方法,视图解析器负责生成和渲染视图。理解这些核心组件及其交互原理,有助于开发者更好地使用和扩展SpringMVC框架。
29 4
|
2月前
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
47 4
|
2月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
138 2
|
2月前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
58 2
|
2月前
|
前端开发 Java 开发者
Spring MVC中的控制器:@Controller注解全解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序控制层的核心。它不仅简化了控制器的定义,还提供了灵活的请求映射和处理机制。本文将深入探讨`@Controller`注解的用法、特点以及在实际开发中的应用。
96 0
|
5月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
66 0