Maison  >  Article  >  Java  >  L'utilisation de 5 annotations couramment utilisées dans springmvc

L'utilisation de 5 annotations couramment utilisées dans springmvc

hzc
hzcoriginal
2020-07-01 17:25:3010799parcourir

Cinq annotations courantes de springmvc : 1. @RequestMapping, qui est une annotation utilisée pour traiter le mappage d'adresse de requête ; 2. @RequestParam, qui est utilisé pour mapper les données de la zone de paramètres de requête aux paramètres de traitement de la fonction ; méthode ; 3. @PathVariable, utilisée pour définir les variables de requête.

L'utilisation de 5 annotations couramment utilisées dans springmvc

@RequestMapping

est une annotation utilisée pour gérer le mappage d'adresses de requête
est applicable aux classes et aux méthodes. Utilisé sur une classe, cela signifie que toutes les méthodes de la classe qui répondent aux requêtes utilisent cette adresse comme chemin parent.

Attributs

value : Spécifiez l'adresse réelle de la demande. La valeur peut être une valeur spécifique ordinaire, ou elle peut être spécifiée comme un type de valeur contenant une certaine variable (URI). Modèles de modèle avec variables de chemin)
Peut être spécifié comme type de valeur contenant des expressions régulières (Modèles de modèle URI avec expressions régulières)
method : Spécifiez le type de méthode de la requête, GET, POST, PUT, DELETE , etc.
consumes : Spécifiez Traiter le type de contenu de soumission (Content-Type) de la demande, tel que application/json, text/html
produces : Spécifiez le type de contenu renvoyé, uniquement lorsque le Le type (Accepter) dans l'en-tête de la requête contient le type spécifié. Retour
params : La requête spécifiée doit contenir certaines valeurs de paramètres avant que cette méthode puisse la traiter
headers : La requête spécifiée doit contenir certaines valeurs. les valeurs d'en-tête spécifiées avant que cette méthode puisse traiter la demande

  1.处理get请求: @RequestMapping(value = "index",method = RequestMethod.GET)
  2.springboot错误处理(使用app客户端返回json格式,使用浏览器返回html错误页)
   @RequestMapping(produces = "text/html")
  3.方法仅处理request Content-Type为“application/json”类型的请求
   @RequestMapping(value = "/pets", consumes="application/json")
  4.仅处理请求中包含了名为“myParam”,值为“myValue”的请求
   @RequestMapping(value = "/pets/{petId}", params="myParam=myValue") 
  5.仅处理request的header中包含了指定“Refer”请求头和对应值为“http://www.rxy.com/”的请求
   @RequestMapping(value = "/pets", headers="Referer=http://www.rxy.com/")

@RequestParam

est utilisée pour mapper les données de la zone de paramètre de demande aux paramètres de la méthode de traitement de fonction
Applicable à : paramètres de méthode

attributs

value/name : les deux attributs font référence à des noms de paramètres, c'est-à-dire le nom du paramètre demandé (généralement l'attribut de nom de formulaire)
required : si c'est nécessaire, la valeur par défaut est true, indiquant que la requête doit avoir les paramètres correspondants, sinon une exception sera levée
defaultValue : Valeur par défaut, indiquant la valeur par défaut s'il n'y a pas de paramètre du même nom dans la requête . Lors de la définition de ce paramètre, require est automatiquement défini sur false

  如果是原子类型,不管加没加注解,都必须有值,否则抛出异常,如果允许空值请使用包装类代替
  index(@RequestParam Integer num){}  表示该参数必须传递,值允许为空
  表示该参数非必须,如果不传则默认为0
  getPageData(@RequestParam(name="pageNum",defaultValue="0") String pageNo, String pageSize)

@PathVariable

Utilisé pour mapper les variables de modèle dans l'URL de la requête aux paramètres de la méthode de traitement de la fonction, c'est-à-dire prendre. extrayez les variables dans le modèle uri en tant que paramètres
Applicable : paramètres de méthode

attributs

valeur : Spécifiez le nom de la variable du modèle d'URL. Si le nom est différent du nom du paramètre de méthode, vous. Vous devez le spécifier. Sinon, vous pouvez l'omettre.

    @RequestMapping("/index/{id}")
         public String index(@PathVariable("id") String sdf){
           System.out.println(sdf);
           return "index";
     }

@ResponseBody

Cette annotation est utilisée pour renvoyer la méthode de Controller L'objet, après avoir été converti au format spécifié via. approprié HttpMessageConverter, est écrit dans la zone de données Response de l'objet body Par défaut, springmvc est renvoyé sous la forme de json (en utilisant le convertisseur jackson)
est. applicable : Méthode, lorsque les données renvoyées ne sont pas une page avec des balises html, mais des données dans un autre format (comme json, xml, etc.), utilisez la
comparaison : @RequestBody Convertissez le corps de la requête HTTP en un Objet HttpMessageConverter approprié
@ResponseBody Renvoyer le contenu ou l'objet en tant que corps de réponse HTTP et appeler l'objet de conversion Adaptateur approprié pour HttpMessageConverter pour écrire dans le flux de sortie

@RequestBody

1. Cette annotation est utilisée pour la lecture. Les données de la partie du corps de la requête Request sont analysées à l'aide du HttpMessageConverter configuré par défaut du système, puis les données correspondantes sont liées à l'objet à renvoyer
2. Liez ensuite les données de l'objet renvoyées par HttpMessageConverter aux paramètres de la méthode dans le contrôleur
Applicable : paramètres de méthode, pour la requête Content-Type : application/json, application/xml doit utiliser cette annotation
Pour application/x-www-form-urlencoded, si la méthode de requête est mise, cette annotation est obligatoire,
Facultatif pour la méthode POST/GET (c'est-à-dire non obligatoire, car @RequestParam, @ModelAttribute peut également être traité)
Pour les données multipart/form, @RequestBody ne peut pas gérer les données dans ce format
Attribut : obligatoire : que cela soit obligatoire, la valeur par défaut est vraie, ce qui signifie que la requête doit avoir les paramètres correspondants, sinon une exception sera levée
Exemple : généralement le front-end utilisant cette annotation envoie une requête ajax, alors la partie requête est la suivante :

         $.ajax({
           type: "POST",
           url:"/role/saveRole",
           contentType:"application/json",
           data: JSON.stringify(_self.form)...

Remarque : contentType ne peut pas être omis, les données doivent être converties en chaîne json via stringify
Ensuite, la méthode correspondante peut être écrite comme this :

@RequestMapping(value = "/saveRole",method = RequestMethod.POST)
public String saveRole(@RequestBody People requestJson) {}

Si le front-end transmet un tableau d'objets, alors le backend peut également utiliser List pour l'accepter directement. C'est le moyen le plus pratique de lier les données de la liste

<.>@CookieValue

peut lier la valeur du cookie dans l'en-tête de requête aux paramètres de la méthode ci-dessus

s'applique à : les paramètres de la méthode

获取cookie中的JSESSIONID
public String index(@CookieValue("JSESSIONID") String cookie){}
@RequestHeader

. peut lier la valeur de la partie en-tête Request aux paramètres de la méthode

s'applique à : paramètres de la méthode

获取请求中Accept-Encoding值,返回gzip, deflate, br
public String index(@RequestHeader("Accept-Encoding") String host){return host;}

@ExceptionHandler

注解在方法上,表示该方法用于处理特定的异常,处理范围是当前类,如果想要全局捕获异常,需要使用@ControllerAdvice
当一个Controller中有多个HandleException注解出现时,那么异常被哪个方法捕捉呢?这就存在一个优先级的问题
ExceptionHandler的优先级是:在异常的体系结构中,哪个异常与目标方法抛出的异常血缘关系越紧密,就会被哪个捕捉到
属性:value: 需要处理的异常类型集合(Class)
在当前Controller有两个处理异常的方法,当访问/index时,页面显示: json data

package com.rxy.controller;

@Controller
public class HelloController {
    
    @ExceptionHandler({ ArithmeticException.class })
    @ResponseBody
    public String handleArithmeticException(Exception e) {
        e.printStackTrace();
        return "json data";
    }
    
    @ExceptionHandler({ IOException.class })
    public String handleIOException(Exception e) {
        e.printStackTrace();
        //返回错误页面
        return "error";
    }

    @RequestMapping("/index")
    public String index(){
        int i = 10 / 0;
        return "index";
    }

}

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn