Maison >Java >javaDidacticiel >Comment obtenir des données de requête dans SpringMVC ?

Comment obtenir des données de requête dans SpringMVC ?

王林
王林avant
2023-05-09 22:04:071533parcourir

    1. Obtenir les paramètres de la demande

    Le format des paramètres de la demande du client est : nom=valeur&nom=valeur... Le côté serveur doit obtenir les paramètres demandés et doit parfois encapsuler les données. SpringMVC peut recevoir les éléments suivants. types de paramètres :

    1) Paramètres de type de base : le nom du paramètre de la méthode métier dans

    Controller doit être cohérent avec le nom du paramètre de requête, et la valeur du paramètre sera automatiquement mappée et mise en correspondance.

    //http://localhost:8080/project/quick9?username=zhangsan&age=12
    @RequestMapping("/quick9")
    @ResponseBody
    public void quickMethod9(String username,int age) throws IOException {
        System.out.println(username);
        System.out.println(age);
    }

    2) Paramètres de type POJO : le nom d'attribut du paramètre POJO de la méthode métier dans

    Controller est cohérent avec le nom du paramètre de requête, et la valeur du paramètre sera automatiquement mappée et mise en correspondance.

    //http://localhost:8080/itheima_springmvc1/quick9?username=zhangsan&age=12
    public class User {
        private String username;
        private int age;
        getter/setter…
    }
    @RequestMapping("/quick10")
    @ResponseBody
    public void quickMethod10(User user) throws IOException {
        System.out.println(user);
    }

    3) Paramètres de type tableau

    Le nom du tableau de méthodes métier dans Controller est cohérent avec le nom du paramètre de requête, et les valeurs des paramètres seront automatiquement mappées et mises en correspondance.

    //http://localhost:8080/project/quick11?strs=111&strs=222&strs=333
    @RequestMapping("/quick11")
    @ResponseBody
    public void quickMethod11(String[] strs) throws IOException {
        System.out.println(Arrays.asList(strs));
    }

    4) Paramètres de type de collection

    Lors de l'obtention des paramètres de collection, vous devez envelopper les paramètres de collection dans un POJO.

    <form action="${pageContext.request.contextPath}/quick12" method="post">
     <input type="text" name="userList[0].username"><br>
     <input type="text" name="userList[0].age"><br>
     <input type="text" name="userList[1].username"><br>
     <input type="text" name="userList[1].age"><br>
     <input type="submit" value="提交"><br>
    </form>
    @RequestMapping("/quick12")
    @ResponseBody
    public void quickMethod12(Vo vo) throws IOException {
        System.out.println(vo.getUserList());
    }

    Lors de la soumission en utilisant ajax, vous pouvez spécifier le contentType comme json, puis utiliser @RequestBody dans la position du paramètre de méthode pour recevoir les données de collection directement sans utiliser POJO pour l'empaquetage.

    <script>
    //模拟数据
    var userList = new Array();
    userList.push({username: "zhangsan",age: "20"});
    userList.push({username: "lisi",age: "20"});
    $.ajax({
    type: "POST",
    url: "/itheima_springmvc1/quick13",
    data: JSON.stringify(userList),
    contentType : &#39;application/json;charset=utf-8&#39;
    });
    </script>
    @RequestMapping("/quick13")
    @ResponseBody
    public void quickMethod13(@RequestBody List<User> userList) throws 
    IOException {
        System.out.println(userList);
    }

    Remarque : Grâce à la capture de paquets de l'outil de développement Google, il a été constaté que le fichier jquery n'était pas chargé. La raison en est que le modèle d'URL du contrôleur frontal SpringMVC DispatcherServlet est configuré avec /, ce qui signifie que toutes les ressources. sont filtrés. Nous pouvons transmettre Les deux méthodes suivantes sont utilisées pour spécifier la libération des ressources statiques : • Spécifiez les ressources publiées dans le spring-mvc

    Lors d'une demande de publication, les données seront tronquées. web.xml pour filtrer l'encodage.

    <mvc:resources mapping="/js/**" location="/js/"/>

    Lorsque le nom du paramètre de la requête est incohérent avec le nom du paramètre de la méthode métier du contrôleur, vous devez afficher la liaison via l'annotation @RequestParam.

    <!--资源过滤器-->
        <filter>
            <filter-name>CharacterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

    3. L'annotation de liaison de paramètre @RequestParam

    annotation @RequestParam a également les paramètres suivants qui peuvent être utilisés :

    valeur :

    Nom du paramètre de requêteobligatoire : Si le paramètre de requête spécifié est obligatoire ou non Inclure, la valeur par défaut est vraie, s'il n'y a pas de paramètre de ce type lors de la soumission, une erreur sera signaléedefaultValue :Lorsqu'aucun paramètre de demande n'est spécifié, la valeur par défaut spécifiée sera utilisée pour l'affectation
    <form action="${pageContext.request.contextPath}/quick14" method="post">
     <input type="text" name="name"><br>
     <input type="submit" value="提交"><br>
    </form>
    Restful est un style architectural et un style de conception logiciel, pas une norme. Il fournit simplement un ensemble de principes et de contraintes de conception. Il est principalement utilisé pour les logiciels interactifs client-serveur. Les logiciels conçus sur la base de ce style peuvent être plus simples, plus multicouches et plus faciles à mettre en œuvre des mécanismes de mise en cache.
    4. Obtenir les paramètres de style Restful
    La requête de style Restful utilise « méthode url+request » pour indiquer le but d'une requête. Les quatre verbes du protocole HTTP indiquant la méthode d'opération sont les suivants :

    GET :

    Obtenir des ressources. DELETE : Supprimer la ressourcePUT :Mettre à jour la ressourcePOST :Nouvelle ressource Obtenir l'utilisateur avec l'identifiant = 1
    /user/1 DELETE : Supprimer l'utilisateur avec l'identifiant = 1
    /user/1 PUT :

    Mettre à jour l'utilisateur avec l'identifiant = 11 dans l'adresse URL ci-dessus /user/1 est le paramètre de requête à obtenir. Dans SpringMVC, des espaces réservés peuvent être utilisés pour la liaison des paramètres. L'adresse /user/1 peut être écrite sous la forme /user/{id} et l'espace réservé {id} correspond à la valeur 1. Dans la méthode métier, nous pouvons utiliser l'annotation @PathVariable pour obtenir une correspondance d'espace réservé. 5. Convertisseur de type personnaliséBien que SpringMVC ait fourni par défaut certains convertisseurs de type couramment utilisés, tels que la conversion de la chaîne soumise par le client en type int pour le réglage des paramètres. Mais tous les types de données ne fournissent pas de convertisseurs. Sinon, vous devez personnaliser le convertisseur. Par exemple, les données de type date nécessitent un convertisseur personnalisé. Étapes de développement du convertisseur de type personnalisé : ① Définir la classe du convertisseur pour implémenter l'interface du convertisseur
    user POST : Ajouter un utilisateur
    @RequestMapping("/quick14")
    @ResponseBody
    public void quickMethod14(@RequestParam(value="name",required = 
    false,defaultValue = "defaultname") String username) throws IOException {
    System.out.println(username);
    }
    //http://localhost:8080/itheima_springmvc1/quick19/zhangsan
    @RequestMapping("/quick19/{name}")
    @ResponseBody
    public void quickMethod19(@PathVariable(value = "name",required = true) String name){
    System.out.println(name);
    }

    ② Déclarez le convertisseur dans le fichier de configuration spring-mvc.xml

    public class DateConverter implements Converter<String, Date> {
        @Override
        public Date convert(String source) {
            SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
            Date date = null;
            try {
                date = format.parse(source);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return date;
        }
    }

    ③ Dans 2c9e182d80bb0e092d1da29bee424e33 Convertisseur de référence

    <!--配置自定义转换器-->
        <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
            <property name="converters">
                <list>
                    <bean class="converter.DateConverter"/>
                </list>
            </property>
        </bean>
      6. Obtenez l'en-tête de la demande
    • @RequestHeader

    • Utilisez @RequestHeader pour obtenir les informations d'en-tête de la demande, qui sont équivalentes à request.getHeader(name) apprises lors de la phase Web. sont les suivants :
    valeur

    Le nom de l'en-tête de la requête

    obligatoire

    Si cet en-tête de la requête doit être porté

    @RequestMapping("/quick17")
    @ResponseBody
    public void quickMethod17(@RequestHeader(value = "User-Agent",required = false) String 
    headerValue){
        System.out.println(headerValue);
    }

    @CookieValue                         

    使用@CookieValue可以获得指定Cookie的值                       @CookieValue注解的属性如下:

    value 指定cookie的名称
    required 是否必须携带此cookie
    @RequestMapping("/quick18")
    @ResponseBody
    public void quickMethod18(@CookieValue(value = "JSESSIONID",required = false) String jsessionid){
        System.out.println(jsessionid);
    }

    7.文件上传

    文件上传客户端三要素:

    • 表单项type=“file”

    • 表单的提交方式是post

    • 表单的enctype属性是多部分表单形式,及enctype=“multipart/form-data”

    <form action="${pageContext.request.contextPath}/quick20" method="post" 
    enctype="multipart/form-data">
    名称:<input type="text" name="name"><br>
    文件:<input type="file" name="file"><br>
     <input type="submit" value="提交"><br>
    </form>

    文件上传步骤

    ① 在pom.xml导入fileupload和io坐标

    <!--文件下载-->
        <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.4</version>
        </dependency>
        <dependency>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
          <version>2.6</version>
        </dependency>

    ② 配置文件上传解析器

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="defaultEncoding" value="UTF-8"/>
            <property name="maxUploadSize" value="500000"/>
        </bean>

    ③ 编写文件上传代码

    @RequestMapping("/quick8")
        @ResponseBody
        public void save8(String name, MultipartFile uploadfile) {
            System.out.println("save8 running...");
            System.out.println(name);
            String filename = uploadfile.getOriginalFilename();
            try {
                uploadfile.transferTo(new File("D:\\upload\\"+filename));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    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