• SpringMVC获得请求数据类型


    目录

    SpringMVC获得请求数据

    获得请求参数

    基本数据类型

    获得POJO类型参数

     获得数组类型参数

    获得集合类型参数

    静态资源访问的开启


    SpringMVC获得请求数据

    获得请求参数

    客户端请求参数的格式是:name=value&name=value.....

    服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接受如下类型的参数:

    • 基本数据类型
    • pojo类型 参数
    • 数据类型参数
    • 集合类型参数

    基本数据类型

    1. //配置类,使用注解把这个类放到容器中
    2. @Controller
    3. @RequestMapping(value="/user")
    4. public class userController {
    5. @RequestMapping("/quick11")
    6. @ResponseBody
    7. public void save11(String username,int age) {
    8. System.out.println(username);
    9. System.out.println(age);
    10. }
    11. }

     这个方法不进行页面跳转和回写数据@ResponseBody和void)

    然后在网页访问书写参数

     

     就可以看到控制台打印出张三 18,这就是基本数据类型

    获得POJO类型参数

    Controller中的业务方法的pojo参数的属性名与请求参数的name一直,参数值会自动映射匹配

    如:

     上图中的username和age属于User之中的,SpringMVC就会自动将这些值加进User去

    pojo包下的User类

    1. package com.pojo;
    2. public class User {
    3. private int age;
    4. private String username;
    5. public User() {
    6. }
    7. public User(int age, String username) {
    8. this.age = age;
    9. this.username = username;
    10. }
    11. public void setAge(int age) {
    12. this.age = age;
    13. }
    14. public int getAge() {
    15. return age;
    16. }
    17. public String getUsername() {
    18. return username;
    19. }
    20. public void setUsername(String username) {
    21. this.username = username;
    22. }
    23. @Override
    24. public String toString() {
    25. return "User{" +
    26. "age=" + age +
    27. ", username='" + username + '\'' +
    28. '}';
    29. }
    30. }
    1. //配置类,使用注解把这个类放到容器中
    2. @Controller
    3. @RequestMapping(value="/user")
    4. public class userController {
    5. @RequestMapping("/quick12")
    6. @ResponseBody
    7. public void save12(User user) {
    8. System.out.println(user);
    9. }
    10. }

     控制台可以看到

     获得数组类型参数

    Controller的业务方法数组名称与请求参数的name一致,参数值救赎自动映射配置。

    1. //配置类,使用注解把这个类放到容器中
    2. @Controller
    3. @RequestMapping(value="/user")
    4. public class userController {
    5. @RequestMapping("/quick13")
    6. @ResponseBody
    7. public void save13(String[] strs) {
    8. //数组直接打印是地址,为了更清楚看到,用Arrays,asList(作为集合打印)
    9. System.out.println(Arrays.asList(strs));
    10. }
    11. }

     网址搜素输入

     控制台显示

    获得集合类型参数

    获得集合参数时,要将集合参数包装到pojo对象才可以

    所以我们在pojo包下创建一个vo对象

    1. package com.pojo;
    2. import java.util.List;
    3. public class VO {
    4. private List userList;
    5. public VO(List userList) {
    6. this.userList = userList;
    7. }
    8. public List getUserList() {
    9. return userList;
    10. }
    11. public void setUserList(List userList) {
    12. this.userList = userList;
    13. }
    14. @Override
    15. public String toString() {
    16. return "VO{" +
    17. "userList=" + userList +
    18. '}';
    19. }
    20. }

     userController类下

    1. //配置类,使用注解把这个类放到容器中
    2. @Controller
    3. @RequestMapping(value="/user")
    4. public class userController {
    5. @RequestMapping("/quick14")
    6. @ResponseBody
    7. public void save14(VO vo){
    8. System.out.println(vo);
    9. }
    10. }

    form.jsp页面下

    1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
    2. <%
    3. String path = request.getContextPath();
    4. String basepath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
    5. %>
    6. <head>
    7. "<%=basepath %>"/>
    8. "utf-8"/>
    9. Insert title here
    10. "${pageContext.request.contextPath}/user/quick14" method="post">
    11. <%--表明是第一个User对象username age--%>
    12. type="text" name="userList[0].name">
    13. type="text" name="userList[0].age">
    14. type="text" name="userList[1].name">
    15. type="text" name="userList[1].age">
    16. type="submit" value="提交">

    运行之后在页面输入数据,控制台输出 

    获得集合类型参数

    静态资源访问的开启

    当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以是直接接收结合数据而无需使用POJO进行包装。

    创建一个js下的

    还有ajax.jsp

    1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
    2. <%
    3. String path = request.getContextPath();
    4. String basepath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
    5. %>
    6. <head>
    7. "<%=basepath %>"/>
    8. "utf-8"/>
    9. Insert title here

    userController类下

    1. //配置类,使用注解把这个类放到容器中
    2. @Controller
    3. @RequestMapping(value="/user")
    4. public class userController {
    5. @RequestMapping("/quick15")
    6. @ResponseBody
    7. public void save15(@ResponseBody List userList) throws Exception {
    8. System.out.println(userList);
    9. }
    10. }

    运行服务器后,发现控制台没有打印数据

     一般是页面出现了问题,打开开发者工具中查看

     发现是这个jQuery文件找不到

    这是静态资源访问权限的问题,解决方式是在spring-mvc中加入

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

    重启服务器运行之后就可以访问了,在网络中查看访问包的情况,共有三次请求

     运行之后控制台会打印数组中的数据。

    也可以在spring-mvc中配置,只需写入一个即可(常用)

    1. <mvc:default-servlet-handler/>
    2. beans>

    解释:访问资源时,SpringMVC找对应的匹配地址,如果找不到则交给原始的容器(这原始的容器为tomcat)tomcat可以找有能力访问静态资

  • 相关阅读:
    王子变青蛙-第11届蓝桥杯Scratch省赛真题第2题
    配置文件生成器-秒杀SSM的xml整合
    科技与时尚共进化,优衣库以硬实力创造品牌长期价值
    GRPC远程调用
    【echarts】24、highchart+vue2 - 3D饼图
    WordPress 如何关闭自动更新的几种方法
    认识Linux操作系统
    STL序列式容器二 ----- vector详解
    数据库1~4NF+ BCNF
    oracle10g的dataguard测试
  • 原文地址:https://blog.csdn.net/weixin_60719453/article/details/125842873