Maison >Java >javaDidacticiel >annotations communes springmvc

annotations communes springmvc

angryTom
angryTomoriginal
2019-07-20 16:18:463452parcourir

annotations communes springmvc

Tutoriels recommandés : Tutoriel Printemps

1. Annotations du composant :

1 @Component Ajoutez l'annotation @Component avant la définition de la classe, ce sera le printemps. Identification des conteneurs et conversion en haricots.

2. @Repository annote la classe d'implémentation Dao (spécial @Component)

3. @Service est utilisé pour annoter la couche de logique métier, (spécial @Component)

4. @Controller est utilisé pour annoter la couche de contrôle, (Spécial. @Component)

Les quatre annotations ci-dessus sont toutes annotées sur la classe La classe annotée sera initialisée en tant que bean d'ici le printemps puis gérée de manière uniforme.

annotations communes springmvc

2. Annotations de type de requête et de paramètre :

1. @RequestMapping : utilisé pour traiter le mappage d'adresses de requête, qui peut être appliqué aux classes et aux méthodes.

Valeur : Définir l'adresse de mappage de la demande de requête

Méthode : Définir la méthode de demande d'adresse, y compris [GET , POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.] La requête get est acceptée par défaut. Si la méthode de requête est différente de la méthode définie, la requête échouera.

 Quantityparams : Définissez les valeurs des paramètres qui doivent être incluses dans la requête de requête.

Quantityheaders : Définissez que la requête doit contenir certains en-têtes de requête spécifiés, tels que : RequestMapping(value = "/something", headers = "content-type=text/*" ) indique que la demande doit contenir l'en-tête Content-type de "text/html", "text/plain" pour être une demande correspondante.

 Quantityconsume : Définissez le type de contenu dont la soumission est demandée.

Quantitys : Spécifiez le type de contenu à renvoyer Ce n'est que lorsque le type (Accepter) dans l'en-tête de la requête contient le type spécifié qu'il renverra

@RequestMapping(value="/requestTest.do",params = {"name=sdf"},headers = {"Accept-Encoding=gzip, deflate, br"},method = RequestMethod.GET)
     public String getIndex(){
         System.out.println("请求成功");
         return "index";
     }

Le code ci-dessus indique que la méthode de requête est une requête GET. Les paramètres de la requête doivent inclure le paramètre name=sdf, puis l'en-tête de la requête doit avoir le type header Accept-Encoding=gzip, deflate, br.

annotations communes springmvc

De cette manière, une demande peut être restreinte via des annotations.

2.@RequestParam : utilisé pour obtenir la valeur du paramètre entrant

weightvalue : le nom du paramètre

weight requis : définition Si le paramètre entrant est obligatoire, la valeur par défaut est true (similaire à l'attribut params de @RequestMapping)

@RequestMapping("/requestParams1.do")
    public String requestParams1(@RequestParam(required = false) String name){
        System.out.println("name = "+name);
        return "index";
    }
    @RequestMapping("/requestParams2.do")
    public String requestParams2(@RequestParam(value = "name",required = false) String names){
        System.out.println("name = "+names);
        return "index";
    }

Les deux méthodes de saisie des paramètres sont les mêmes lorsque le nom du. La valeur déclarée est affichée, entrez le paramètre. Le nom du paramètre est le même que la valeur. S'il n'y a pas de déclaration explicite, comme déclaré de la première manière, le nom du paramètre d'entrée est le même que le nom de la variable du paramètre de fonction.

3.@PathViriable : utilisé pour définir les valeurs des paramètres de chemin

●value : le nom du paramètre

●required : définit si le paramètre entrant est une valeur obligatoire

@RequestMapping("/{myname}/pathVariable2.do")    public String pathVariable2(@PathVariable(value = "myname") String name){
        System.out.println("myname = "+name);        return "index";
    }

Ce chemin déclare {myname} comme paramètre de chemin, puis ce chemin sera N'importe quelle valeur, @PathVariable pourra obtenir la valeur du chemin en fonction de la valeur.

4.@ResponseBody : agit sur la méthode et peut renvoyer l'intégralité du résultat renvoyé dans un certain format, tel que json ou format XML.

 @RequestMapping("/{myname}/pathVariable2.do")
      @ResponseBody
      public String pathVariable2(@PathVariable(value = "myname") String name){
          System.out.println("myname = "+name);
          return "index";
      }

annotations communes springmvc

Il renvoie non pas une page, mais une chaîne " index " est imprimé directement sur la page, ce qui est en fait similaire au code suivant.

PrintWriter out = resp.getWriter();
 out.print("index");
 out.flush();

5、@CookieValue:用于获取请求的Cookie值

 @RequestMapping("/requestParams.do")
      public String requestParams(@CookieValue("JSESSIONID") String cookie){
          return "index";
      }

6、@ModelAttribute:

  用于把参数保存到model中,可以注解方法或参数,注解在方法上的时候,该方法将在处理器方法执行之前执行,然后把返回的对象存放在 session(前提时要有@SessionAttributes注解) 或模型属性中,@ModelAttribute(“attributeName”) 在标记方法的时候指定,若未指定,则使用返回类型的类名称(首字母小写)作为属性名称。 

@ModelAttribute("user")
    public UserEntity getUser(){
        UserEntity userEntityr = new UserEntity();
        userEntityr.setUsername("asdf");
        return userEntityr;
    }

    @RequestMapping("/modelTest.do")
    public String getUsers(@ModelAttribute("user") UserEntity user){
        System.out.println(user.getUsername());
        return "/index";
    }

  如上代码中,使用了@ModelAttribute("user")注解,在执行控制器前执行,然后将生成一个名称为user的model数据,在控制器中我们通过注解在参数上的@ModelAttribute获取参数,然后将model应用到控制器中,在jsp页面中我们同样可以使用它,

 <body>
      ${user.username}
 </body>

7、@SessionAttributes

  默认情况下Spring MVC将模型中的数据存储到request域中。当一个请求结束后,数据就失效了。如果要跨页面使用。那么需要使用到session。而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中。配合@ModelAttribute("user")使用的时候,会将对应的名称的model值存到session中,

@Controller
@RequestMapping("/test")
@SessionAttributes(value = {"user","test1"})
public class LoginController{
    @ModelAttribute("user")
    public UserEntity getUser(){
        UserEntity userEntityr = new UserEntity();
        userEntityr.setUsername("asdf");
        return userEntityr;
    }

    @RequestMapping("/modelTest.do")
    public String getUsers(@ModelAttribute("user") UserEntity user ,HttpSession session){
        System.out.println(user.getUsername());
        System.out.println(session.getAttribute("user"));
        return "/index";
    }
}

  结合上一个例子的代码,加了@SessionAttributes注解,然后请求了两次,第一次session中不存在属性名为user的值,第二次请求的时候发现session中又有了,这是因为,这是因为第一次请求时,model数据还未保存到session中请求结束返回的时候才保存,在第二次请求的时候已经可以获取上一次的model了

1068779-20171027175359008-1504110330 (1).png

注意:@ModelAttribute("user") UserEntity user获取注解内容的时候,会先查询session中是否有对应的属性值,没有才去查询Model。

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