SpringBoot接受参数相关注解方式

 更新时间:2024年12月09日 11:07:14   作者:S-X-S  
SpringBoot接受参数的注解包括@PathVariable、@RequestHeader、@RequestParameter、@CookieValue、@RequestBody、@RequestAttribute和@SessionAttribute等,每个注解都有详细的使用方法和示例代码

SpringBoot接受参数相关注解

1.基本介绍

2.@PathVariable 路径参数获取信息

1.代码实例

1.index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>基本注解</h1>
<hr/>
<a href="/monster/100/king" rel="external nofollow" >@PathVariable-路径变量:/monster/100/king</a>
</body>
</html>

2.ParameterController.java

package com.sun.springboot.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * @author 孙显圣
 * @version 1.0
 */
@RestController
public class ParameterController {

    @GetMapping("/monster/{id}/{name}") //接受两个路径参数
    public String pathVariable(@PathVariable("id") Integer id, @PathVariable("name") String name,
                               @PathVariable Map<String, String> map) { //这里的map指将所有的路径参数都放到map中
        System.out.println("id:" + id + " name:" + name);
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println("key:" + entry.getKey() + " value: " + entry.getValue());
        }
        return "success"; //返回json给浏览器
    }

}

3.测试

2.细节说明

  • @PathVariable(“xxx”)必须跟{xxx}相对应
  • 可以将所有的路径参数放到map中 @PathVariable Map<String, String> map

3.@RequestHeader 请求头获取信息

1.代码实例

1.index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>基本注解</h1>
<hr/>
<a href="/requestHeader" rel="external nofollow" >@RequestHeader-获取请求头信息</a>
</body>
</html>

2.ParameterController.java

package com.sun.springboot.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * @author 孙显圣
 * @version 1.0
 */
@RestController
public class ParameterController {

    @GetMapping("/requestHeader") //获取请求头的信息
    public String requestHeader(@RequestHeader("host") String host, @RequestHeader Map<String, String> header) {
        System.out.println("host:" + host);
        System.out.println(header);
        return "success";
    }

}

3.测试

2.细节说明

  • 请求头的信息都是以key - value的形式存储的
  • 可以通过@RequestHeader(“xxx”)来获取xxx对应的value
  • 也可以通过@RequestHeader Map<String, String> header将所有的key - value都封装到map中

4.@RequestParameter 请求获取参数信息

1.代码实例

1.index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>基本注解</h1>
<hr/>
<a href="/hi?hobby=打篮球&hobby=踢球" rel="external nofollow" >@RequestParam-请求参数</a>
</body>
</html>

2.ParameterController.java

package com.sun.springboot.controller;

import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author 孙显圣
 * @version 1.0
 */
@RestController
public class ParameterController {

    @GetMapping("/hi")
    public String hi(@RequestParam(value = "name", defaultValue = "孙显圣") String name,
                     @RequestParam("hobby") List<String> list) {
        System.out.println("name:" + name);
        System.out.println(list);
        return "success";
    }


}

3.测试

2.细节说明

  • 请求参数是可以设置默认值的,使用defaultValue属性即可
  • 请求参数还可以将同名的结果封装到List中
  • 请求参数也可以使用@RequestParameter Map<String, String> map 将所有参数封装到map中,但是如果有同名的结果只会得到第一个,因为map的key是唯一的

5.@CookieValue cookie获取值

1.代码实例

1.index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>基本注解</h1>
<hr/>
<a href="/cookie" rel="external nofollow" >@CookieValue-获取cookie的值</a>
</body>
</html>

2.ParameterController.java

package com.sun.springboot.controller;

import org.springframework.web.bind.annotation.*;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

/**
 * @author 孙显圣
 * @version 1.0
 */
@RestController
public class ParameterController {

    @GetMapping("/cookie")
    //这里可以设置required = false意为不是必须存在的,如果不存在则得到的值就为null
    //如果后面的参数类型是Cookie,则会获取Cookie对象并封装到变量中
    public String cookie(@CookieValue(value = "cookie_key", required = false) String cookie_value,
                         @CookieValue(value = "username" , required = false) Cookie cookie, HttpServletRequest request) {
        //使用原生api获取cookies
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie1 : cookies) {
            System.out.println(cookie1);
        }

        System.out.println(cookie_value);
        System.out.println("name:" + cookie.getName() + " value: " + cookie.getValue());

        return "success";
    }


}

3.测试

2.细节说明

  • @CookieValue可以根据后面要封装的参数的类型来获取指定的值,如果后面的类型是Cookie类型则会获取一个Cookie对象并封装进入,如果是String类型则会获取Cookie的value来进行封装
  • 还可以通过Servlet原生api的request来获取所有的cookie
  • @CookieValue中有属性required默认为true,意为必须存在,否则报错,如果设置为false,则如果获取不到则为null

6.@RequestBody 处理json请求,post请求体获取信息

1.代码实例

1.index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>基本注解</h1>
<hr/>
<form action="/requestBody" method="post">
    <input type="text" name="username"><br>
    <input type="text" name="password"><br>
    <input type="submit" value="submit">
</form>
</body>
</html>

2.ParameterController.java

package com.sun.springboot.controller;

import org.springframework.web.bind.annotation.*;



/**
 * @author 孙显圣
 * @version 1.0
 */
@RestController
public class ParameterController {

    @PostMapping("requestBody")
    public String getRequestBody(@RequestBody String requestBody) { //获取请求体
        System.out.println(requestBody);
        return "success";
    }

}

3.测试

7.@RequestAttribute 请求域获取信息

1.代码实例

1.RequestController.java

package com.sun.springboot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
/**
 * @author 孙显圣
 * @version 1.0
 */
@Controller
public class RequestController {

    @GetMapping("/login")
    public String login(HttpServletRequest request) {
        //在Request域中存放一些信息
        request.setAttribute("name", "sun");
        request.setAttribute("age", 13);
        //调用视图解析器,请求转发到/ok
        return "forward:/ok";
    }

    @ResponseBody
    @GetMapping("/ok")
    public String ok(@RequestAttribute(value = "name", required = false) String name) { //使用注解来获取请求域中的信息并封装到参数中
        System.out.println("name: " + name);
        return "success"; //返回json给浏览器
    }
}

2.配置视图解析器 application.yml

spring:
  mvc:
    view: #配置了视图解析器
      suffix: .html #后缀
      prefix: / #前缀,指的是根目录

3.测试

8.@SessionAttribute session域获取信息

1.代码实例

1.SessionController.java

    package com.sun.springboot.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.SessionAttribute;
    
    import javax.servlet.http.HttpServletRequest;
    /**
     * @author 孙显圣
     * @version 1.0
     */
    @Controller
    public class SessionController {
    
        @GetMapping("/login")
        public String login(HttpServletRequest request) {
            //在session域中设置信息
            request.getSession().setAttribute("session", "session_value");
    
            //调用视图解析器,请求转发到/ok
            return "forward:/ok";
        }
    
        @ResponseBody
        @GetMapping("/ok")
        public String ok(@SessionAttribute(value = "session") String value) { //使用注解来获取session域中的信息并封装到参数中
            System.out.println("session: " + value);
            return "success"; //返回json给浏览器
        }
    }

2.配置视图解析器(同上)

3.测试

9.复杂参数

1.代码实例

1.RequestController.java

package com.sun.springboot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;
import java.util.Map;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Controller
public class RequestController {

    @GetMapping("/login")
    public String login(Map<String, Object> map, Model model, HttpServletResponse response) {
        //给map封装信息
        map.put("user", "sun");
        map.put("job", "工程师");

        //model封装信息
        model.addAttribute("sal", 1000);

        //结果最后都会封装到request域中

        //调用视图解析器,请求转发到/ok
        return "forward:/ok";
    }

    @ResponseBody
    @GetMapping("/ok")
    public String ok(@RequestAttribute("user") String user, @RequestAttribute("job") String job,
                     @RequestAttribute("sal") Integer sal) { //使用注解来获取请求域中的信息并封装到参数中
        System.out.println("user:" + user + " job:" + job + " sal:" +sal);
        return "success"; //返回json给浏览器
    }
}

2.测试

2.HttpServletResponse给浏览器设置cookie

1.代码实例

package com.sun.springboot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Controller
public class RequestController {

    @GetMapping("/login")
    public String login(HttpServletResponse response) {
        Cookie cookie = new Cookie("cookie_name", "cookie_value");
        response.addCookie(cookie);

        //调用视图解析器,重定向到/ok,不能使用请求转发,因为虽然响应给客户端cookie了,
        // 但是由于是请求转发,第二个controller得到的是最开始的请求,那时候还没有cookie
        return "redirect:/ok";
    }

    @ResponseBody
    @GetMapping("/ok")
    public String ok(@CookieValue("cookie_name") Cookie cookie) {
        //获取cookie
        System.out.println("key:" + cookie.getName() + " value:" + cookie.getValue());
        return "success"; //返回json给浏览器
    }
}

2.测试

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java集合之Set、HashSet、LinkedHashSet和TreeSet深度解析

    Java集合之Set、HashSet、LinkedHashSet和TreeSet深度解析

    这篇文章主要介绍了Java集合之Set、HashSet、LinkedHashSet和TreeSet深度解析,List是有序集合的根接口,Set是无序集合的根接口,无序也就意味着元素不重复,更严格地说,Set集合不包含一对元素e1和e2 ,使得e1.equals(e2) ,并且最多一个空元素,需要的朋友可以参考下
    2023-09-09
  • selenium-java实现自动登录跳转页面方式

    selenium-java实现自动登录跳转页面方式

    利用Selenium和Java语言可以编写一个脚本自动刷新网页,首先,需要确保Google浏览器和Chrome-Driver驱动的版本一致,通过指定网站下载对应版本的浏览器和驱动,在Maven项目中添加依赖,编写脚本实现网页的自动刷新,此方法适用于需要频繁刷新网页的场景,简化了操作,提高了效率
    2024-11-11
  • Java异常 Exception类及其子类(实例讲解)

    Java异常 Exception类及其子类(实例讲解)

    下面小编就为大家带来一篇Java异常 Exception类及其子类(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • java中如何获取相关参数

    java中如何获取相关参数

    这篇文章主要介绍了java获取系统属性相关参数的方法,,需要的朋友可以参考下
    2015-07-07
  • spring redis 如何实现模糊查找key

    spring redis 如何实现模糊查找key

    这篇文章主要介绍了spring redis 如何实现模糊查找key的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java_Spring之XML 的 AOP 配置

    Java_Spring之XML 的 AOP 配置

    这篇文章主要介绍了Java_Spring中基于XML的AOP配置,上篇讲到的是基于注解的AOP配置,对XML感兴趣的同学可以参考阅读本文
    2023-04-04
  • Spring Boot 整合mybatis 使用多数据源的实现方法

    Spring Boot 整合mybatis 使用多数据源的实现方法

    这篇文章主要介绍了Spring Boot 整合mybatis 使用多数据源的实现方法,需要的朋友可以参考下
    2018-03-03
  • @DS注解的使用,动态数据源,事务详解

    @DS注解的使用,动态数据源,事务详解

    在项目中使用多数据源时,可以借助苞米豆的dynamic-datasource-spring-boot-starter进行配置,首先需引入相应的jar包,并在application.yml中设置主从数据源,其中一般选择master作为默认数据源,在实现类中通过@DS注解指定数据源
    2024-09-09
  • Java时间类Date类和Calendar类的使用详解

    Java时间类Date类和Calendar类的使用详解

    这篇文章主要介绍了Java时间类Date类和Calendar类的使用详解,需要的朋友可以参考下
    2017-08-08
  • 基于Class.forName()用法及说明

    基于Class.forName()用法及说明

    这篇文章主要介绍了基于Class.forName()用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11

最新评论