• JavaEE Spring MVC 常用注解


    @RequestMapping

           ⽤来注册接⼝的路由映射。当⽤户访问⼀个 url 时,将⽤户的请求对应到程序中某个类的某个⽅法的过程就叫路由映射。

    1. @Controller //类注解不能忘
    2. @RequestMapping("/webcontroller")
    3. public class WebController {
    4. @RequestMapping("/sayhi")
    5. public String sayHi() {
    6. return "Hi~";
    7. }
    8. }

    通过输入网址localhost:8080/webcontroller/sayhi就可以访问到。但是实际上你看到的又不一样。

    对于上述的情况,在确定你的URL正确的情况下,我们需要另外加一个注解:@ResponseBody,加在类上。就可以让页面打印出来Hi~。

    @ResponseBody

            @ResponseBody的作用是将Java对象转为某种格式的数据,用来返回JSON数据或者XML数据。SpringMVC模型如下:

            没有加这个注解的时候,Controller返回的数据将经过View,经过View转发后返回给客户端,而加了注解,相当于将数据直接返回给客户端。View表示视图的意思,也就是说,如果没有加该注解,View希望拿到一个html页面。

    现在写一个简单的html页面,后端返回该页面。看看没有加@ResponseBody:

    1. @Controller
    2. // @ResponseBody
    3. @RequestMapping("/webcontroller")
    4. public class WebController {
    5. @RequestMapping("/sayhi")
    6. public Object sayHi() {
    7. return "/index.html";
    8. }
    9. }
    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport"
    6. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    8. <title>Documenttitle>
    9. head>
    10. <body>
    11. <div>
    12. <h1>Hello World!h1>
    13. div>
    14. body>
    15. html>

    加了@ResponseBody:

    当然,如果我们这样写代码: 

     

    这是浏览器自动解析的结果。

            @ResponseBody注解使用的地方非常多,和@Controller组合起来一个新的注解叫@RestController,起到@ResponseBody+@Controller的作用。

    @RequestMapping是post请求还是get请求

    前面我们说@RequestMapping注解,那么他是post请求还是get请求?使用PostMan快速测试。

            可以看出, @RequestMapping既可以是post也可以是get请求。但是一般情况下,我们并不希望一个方法可以解析多个请求,要么只解析get请求,要么只解析post请求。我们可以通过method来指定。

    发送get请求:

    更简单的写法:@GetMapping 和 PostMapping

    @GetMapping 和 PostMapping

    1. @Controller
    2. @ResponseBody
    3. @RequestMapping("/webcontroller")
    4. public class WebController {
    5. @GetMapping("/getmapping")
    6. public String getMapping() {
    7. return "getMapping";
    8. }
    9. }

    发送get请求: 

    1. @Controller
    2. @ResponseBody
    3. @RequestMapping("/webcontroller")
    4. public class WebController {
    5. @PostMapping("/postmapping")
    6. public String postMapping() {
    7. return "postMapping";
    8. }
    9. }

    发送post请求:

    传递参数

            以前什么传递参数,现在仍然什么传递参数,非常的方便。可以传单个参数,也可以传多个参数,还可以传一个对象,这里不在演示。

    1. @GetMapping("/getmapping")
    2. public String getMapping(String name) {
    3. return "name: " + name;
    4. }

    @RequestParam后端参数重命名

            某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 不⼀致,这个时候,我们可以使用@RequestParam注解来重命名。 

            但是这样的话,他只能获取前端传来的prename。如果前端传来别的参数,也会报错,所以需要另外加一个required属性,值为false,用来指定prename是不是必须要传的。

    @RequestBody

    用来接受json格式的对象。如果不加该注解,是获取不到参数的。同时,需要传给一个对象。

            使用HashMap作为返回值的原因是他也是key-value格式,返回给前端就会被转化成json。当然,你返回User的对象也是可以的,符合key-value的格式。

    1. @Data //需要添加lombok支持
    2. public class User {
    3. private String name;
    4. private Integer password;
    5. }

    1. @RequestMapping("/jsonlogin")
    2. public User jsonLogin(@RequestBody User user) {
    3. User user1 = new User();
    4. user1.setName(user.getName());
    5. user1.setPassword(user.getPassword());
    6. return user1;
    7. }

    @PathVariable 

            这个参数用来获取URL中的参数。

    1. @RequestMapping("/pathvariable/{name}/{password}")
    2. public String pathVariable(@PathVariable String name,@PathVariable Integer password) {
    3. return "name: " + name + " | password: " + password;
    4. }

    @RequestPart

            用来上传文件。

    1. @RequestMapping("/requestpart")
    2. public String requestPart(String name, @RequestPart("myfile") MultipartFile file) {
    3. try {
    4. file.transferTo(new File("E:\\Git\\java-learning\\22_java_12\\java_12_01\\java120101\\src\\main\\resources\\static\\image\\img.png"));
    5. } catch (IOException e) {
    6. e.printStackTrace();
    7. }
    8. return "success!";
    9. }

    @CookieValue

            获取cookie。

    1. @RequestMapping("/getcookie")
    2. public String getCookie(@CookieValue("name") String name,
    3. @CookieValue("password") Integer password) {
    4. return "name: " + name + " | password: " + password;
    5. }

     读取Session

            @SessionAttribute用来获取session。

    1. //先设置session
    2. @RequestMapping("/setsess")
    3. @ResponseBody
    4. public String setSess(HttpServletRequest request) {
    5. HttpSession httpSession = request.getSession(true);
    6. if (httpSession != null) {
    7. httpSession.setAttribute("name", "111");
    8. }
    9. return "session";
    10. }
    11. @RequestMapping("getsess")
    12. @ResponseBody
    13. public String getSess(@SessionAttribute(value = "name", required = false) String name) {
    14. return name;
    15. }

    读取请求头

    使用@RequestHeader注解。

    1. @RequestMapping("/getheader")
    2. public String getHeader(@RequestHeader("user-Agent") String userAgent) {
    3. return userAgent;
    4. }

  • 相关阅读:
    22.(地图工具篇)geoserver点服务图层SLD样式效果1
    Effective Java学习笔记---------类和接口
    【新知实验室】实现视频应用
    leetcode做题笔记2736. 最大和查询
    基于JavaWEB+MySQL的学生成绩综合管理系统
    Vue笔记(八)Vue3 新特性
    神经网络常用激活函数详解
    【业务功能110】微服务-springcloud-springboot-Kubernetes集群部署-kubeadm极速部署-Docker安装
    金仓数据库 KingbaseES插件参考手册 B
    STM32直接存储器存取DMA
  • 原文地址:https://blog.csdn.net/Naion/article/details/128127914