Maison >Java >javaDidacticiel >Comment obtenir des données de requête dans SpringMVC ?
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 :
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); }
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); }
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)); }
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 : 'application/json;charset=utf-8' }); </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>
valeur :
obligatoire : | 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ée |
defaultValue : | Lorsqu'aucun paramètre de demande n'est spécifié, la valeur par défaut spécifiée sera utilisée pour l'affectation |
4. Obtenir les paramètres de style Restful |
GET :
. DELETE : | Supprimer la ressource |
PUT : | Mettre à jour la ressource |
POST : | Nouvelle ressource |
/user/1 DELETE : Supprimer l'utilisateur avec l'identifiant = 1 |
user POST : | Ajouter un utilisateur |
1 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é. | @RequestMapping("/quick14") @ResponseBody public void quickMethod14(@RequestParam(value="name",required = false,defaultValue = "defaultname") String username) throws IOException { System.out.println(username); } | 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. | |
Étapes de développement du convertisseur de type personnalisé : |
//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; } }
<!--配置自定义转换器--> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="converter.DateConverter"/> </list> </property> </bean>
@RequestHeader
@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); }
文件上传客户端三要素:
表单项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!