Maison  >  Article  >  Java  >  Quelles sont les annotations utilisées par SpringBoot pour recevoir les paramètres ?

Quelles sont les annotations utilisées par SpringBoot pour recevoir les paramètres ?

WBOY
WBOYavant
2023-05-10 15:49:331811parcourir

1. Introduction de base

SpringBoot utilisera des explications pertinentes lors de la réception des données/paramètres soumis par le client

Explication détaillée de @PathVariable, @RequestHeader, @ModelAttribute, @RequestParam, @MatrixVariable, @CookieValue, @RequestBody

2. Exemple d'application d'annotation liée aux paramètres de réception

1. Exigences : Démontrer différentes manières de soumettre des données/paramètres au serveur et comment le serveur utilise des annotations pour les recevoir

2. Démonstration d'un exemple d'application

Exigences : Démontrer différentes manières de soumettre des données. /paramètres au serveur et comment le serveur l'utilise Réception d'annotations

Quelles sont les annotations utilisées par SpringBoot pour recevoir les paramètres ?

Créer srcmainresourcesstaticindex.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
<h2>hello, llp</h2>
基本注解:
<hr/>
<a href="/monster/200/jack" rel="external nofollow" >@PathVariable-路径变量 monster/200/jack</a><br/><br/>
</body>
</html>

@PathVariable Utiliser

Démo @PathVariable Utiliser, créer srcmainjavacomllpspringbootcontrollerParameterController.java, terminer le test

@RestController
public class ParameterController {
    /**
     * /monster/{id}/{name} 解读
     * 1. /monster/{id}/{name} 构成完整请求路径
     * 2. {id} {name} 就是占位变量
     * 3. @PathVariable("name"): 这里name 和{name} 命名保持一致
     * 4. String name_ 这里自定义,和{name}命名无关
     * 5. @PathVariable Map<String, String> map 把所有传递的值传入map
     * 6. 可以看下@PathVariable源码
     */
    @GetMapping("/monster/{id}/{name}")
    public String pathVariable(@PathVariable("id") Integer id,
                               @PathVariable("name") String name,
                               @PathVariable Map<String, String> map) {
        System.out.println("id-" + id);
        System.out.println("name-" + name);
        System.out.println("map-" + map);
        return "success";
    }
}

Quelles sont les annotations utilisées par SpringBoot pour recevoir les paramètres ?

@Request Header utilise

pour démontrer l'utilisation de @RequestHeader et modifier ParameterController. java, complétez le test

√ Modify index.html

<a href="/requestHeader" rel="external nofollow" >@RequestHeader-获取Http请求头 </a><br/><br/>

√ Démo @RequestParam, modifiez ParameterController.java, complétez le test

√ Modifier l'index .htmlQuelles sont les annotations utilisées par SpringBoot pour recevoir les paramètres ?

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

√ , complétez le test

√ Modify index.html

<a href="/hi?name=wukong&fruit=apple&fruit=pear&id=300&address=北京" rel="external nofollow" >@RequestParam-获取请求参数</a><br/><br/>

√ Modify ParameterController.java

/**
 * @param username wukong
 * @param fruits  List<String> fruits 接收集合 [apple, pear]
 * @param paras Map<String, String> paras 如果我们希望将所有的请求参数的值都获取到,
 *              可以通过@RequestParam Map<String, String> paras这种方式
 *             一次性的接收所有的请求参数 {name=wukong, fruit=apple, id=300, address=北京}
 *             如果接收的某个参数中有多个之值比如这里fruits是一个集合,从map中只能拿到一个
 *              可以理解map底层会将相同的key的value值进行覆盖
 * @return
 * @RequestParam
 */
@GetMapping("/hi")
public String hi(@RequestParam(value = "name") String username,
                 @RequestParam("fruit") List<String> fruits,
                 @RequestParam Map<String, String> paras) {
    //username-wukong
    System.out.println("username-" + username);
    //fruit-[apple, pear]
    System.out.println("fruit-" + fruits);
    //paras-{name=wukong, fruit=apple, id=300, address=北京}
    System.out.println("paras-" + paras);
    return "success";
}

@RequestBody utilise

pour démontrer l'utilisation de @RequestBody, modifiez ParameterController.java, terminez le test

√ Modifiez index.html

<a href="/cookie" rel="external nofollow" >@CookieValue-获取cookie值</a><br/><br/>

√ Modifiez ParameterController.java

/**
 * 因为我的浏览器目前没有cookie,我们可以自己设置cookie[技巧还是非常有用]
 * 如果要测试,可以先写一个方法,在浏览器创建对应的cookie
 * 说明 1. value = "cookie_key" 表示接收名字为 cookie_key的cookie
 * 2. 如果浏览器携带来对应的cookie , 那么 后面的参数是String ,则接收到的是对应对value
 * 3. 后面的参数是Cookie ,则接收到的是封装好的对应的cookie
 */
@GetMapping("/cookie")
public String cookie(@CookieValue(value = "cookie_key", required = false) String cookie_value,
                     HttpServletRequest request,
                     @CookieValue(value = "username", required = false) Cookie cookie) {
    System.out.println("cookie_value-" + cookie_value);
    if (cookie != null) {
        System.out.println("username-" + cookie.getName() + "-" + cookie.getValue());
    }
    System.out.println("-------------------------");
    Cookie[] cookies = request.getCookies();
    for (Cookie cookie1 : cookies) {
        System.out.println(cookie1.getName() + "=>" + cookie1.getValue());
    }
    return "success";
}

@RequestAttribute et utilisez @SessionAttribute Quelles sont les annotations utilisées par SpringBoot pour recevoir les paramètres ?

Demo @RequestAttribute @SessionAttribute est utilisé, créez com/hspedu/web/controller/RequestController.java, complétez le test

√ modifier index.html

<hr/>
<h2>测试@RequestBody获取数据: 获取POST请求体</h2>
<form action="/save" method="post">
    姓名: <input name="name"/> <br>
    年龄: <input name="age"/> <br/>
    <input type="submit" value="提交"/>
</form>

√ créer RequestController.java

/**
 * @RequestBody 是整体取出Post请求内容
 */
@PostMapping("/save")
public String postMethod(@RequestBody String content) {
    System.out.println("content-" + content);
    return "success";
}

3. Paramètres complexes

1. Introduction de base

En développement, SpringBoot prend également en charge des paramètres complexes lors de la réponse aux demandes des clients.

Quelles sont les annotations utilisées par SpringBoot pour recevoir les paramètres ?

Map, Model, Errors/BindingResult, RedirectAttributes, ServletResponse, SessionStatus, UriComponentsBuilder, ServletUriComponentsBuilder, HttpSession

Les données de la carte et du modèle seront placées dans le champ de requête et le request.setAttribute()
    sous-jacent
  • Les redirections RedirectAttributes transportent des données
  • 2. Exemples d'application de paramètres complexes
  • ####1 Description : Démontrer l'utilisation de paramètres complexes, se concentrer sur : Carte, modèle, ServletResponse

    2.
  • 4. Paramètres d'objet personnalisés - encapsulation automatique
  • 1. Introduction de base

En développement, SpringBoot répond au client Lors de la demande, il prend également en charge les paramètres d'objet personnalisés

pour effectuer la conversion et le formatage automatiques de type

. Quelles sont les annotations utilisées par SpringBoot pour recevoir les paramètres ?

prend en charge l'empaquetage en cascade

2. Paramètres d'objet personnalisés - exemples d'application
  • 1. Description de l'exigence : Démonstration personnelle Définir l'utilisation des paramètres d'objet et compléter l'encapsulation automatique et la conversion de type

  • 2. 1. Créez srcmainresourcesstaticsave.html

    <a href="/login" rel="external nofollow" >@RequestAttribute、@SessionAttribute-获取request域、session属性-</a>
  • 2. Modifiez srcmainjavacomllpspringbootcontrollerParameterController.java
  •     @GetMapping("/login")
        public String login(HttpServletRequest request) {
            request.setAttribute("user", "llp");
            //向session中添加数据
            request.getSession().setAttribute("website", "http://www.baidu.com");
            //这里需要使用forward关键字,如果不适用则会走视图解析器,这
            //里视图解析器前缀配置的是/  后缀配置的.html  ---> /ok.html
            //而请求转发在服务器端执行,/被解析成 ip:port/工程路径
            //进而最终得到的完整路径是 ip:port/工程路径/ok.html
            //但是我们这里希望访问的是 ip:port/工程路径/ok这个请求路径
            //因此这里手动的设置forward:/ok ,底层会根据我们设置的路径进行请求转发
            return "forward:/ok";
        }
        @GetMapping("ok")
        //返回字符串,不走视图解析器
        @ResponseBody
        public String ok(@RequestAttribute(value = "user", required = false) String username,
                         @SessionAttribute(value = "website",required = false) String website, HttpServletRequest request) {
            System.out.println("username= " + username);
            System.out.println("通过servlet api 获取 username-" +  request.getAttribute("user"));
            System.out.println("website = " + website);
            System.out.println("通过servlet api 获取 website-"+request.getSession().getAttribute("website"));
            return "success";
        }
    }

  • .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer