SpringMVC获得请求数据1:对象集合ajax接收、@ResponseBoby、jsp把el打开、请求数据乱码用过滤器、@requestParam、Restful((@PathVariable)

这篇博客详细介绍了如何在SpringMVC中处理各种类型的请求数据,包括基本类型、POJO、数组、集合(表单和Ajax提交),并解决了请求数据乱码的问题。此外,还涉及了@RequestBody、@RequestParam、Restful风格的URL以及自定义类型转换器的使用。示例代码丰富,涵盖了从表单提交到Ajax请求的全面示例。

这里说的是获取浏览器请求过来的参数的意思

在这里插入图片描述在这里插入图片描述

总代码参考上一篇(有改动):
https://blog.csdn.net/GLOAL_COOK/article/details/112801651

QuickController :

package cn.itcast.controller;

        import cn.itcast.domain.User;
        import cn.itcast.domain.VO;
        import com.fasterxml.jackson.databind.ObjectMapper;
        import org.springframework.stereotype.Controller;
        import org.springframework.ui.Model;
        import org.springframework.web.bind.annotation.*;
        import org.springframework.web.servlet.ModelAndView;

        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import javax.servlet.http.HttpSession;
        import java.io.IOException;
        import java.util.ArrayList;
        import java.util.Arrays;
        import java.util.Date;
        import java.util.List;

/**
 * @author QLBF
 * @version 1.0
 * @date 2021/1/17 21:10
 */

@Controller
@RequestMapping("/user")  //一级访问目录
public class QuickController {

   //下面演示获取请求数据--之获得基本类型参数
    @RequestMapping(value = "/quick11",produces = "application/json;charset=utf-8")
    @ResponseBody
    public void save11(String username,int age) throws Exception {
        System.out.println(username);
        System.out.println(age);
    }
	
    //下面演示获取请求数据--之获得POJO类型参数
    @RequestMapping(value = "/quick12",produces = "application/json;charset=utf-8")
    @ResponseBody
    public void save12(User user) throws Exception {
        System.out.println(user);
    }

    //下面演示获取请求数据--之数组
    @RequestMapping(value = "/quick13",produces = "application/json;charset=utf-8")
    @ResponseBody
    public void save13(String[] strs) throws Exception {
        System.out.println(Arrays.asList(strs));
    }

    //下面演示获取请求数据--之集合有对象,用表单提交
    @RequestMapping(value = "/quick14",produces = "application/json;charset=utf-8")
    @ResponseBody
    public void save14(VO vo) throws Exception {
        System.out.println(vo);
    }

    //下面演示获取请求数据--之集合有对象,用ajax提交
    @RequestMapping(value = "/quick15",produces = "application/json;charset=utf-8")
    @ResponseBody
    public void save15(@RequestBody List<User> userList) throws Exception {
        System.out.println(userList);
    }


    //下面演示获取请求数据--请求参数可以和形参不一样
    @RequestMapping(value = "/quick16",produces = "application/json;charset=utf-8")
    @ResponseBody
    public void save16(@RequestParam(value = "name11",required = false,defaultValue = "李云龙")String username) throws Exception {
        System.out.println(username);
    }

    //下面演示获取请求数据--restful
    // localhost:8080/user/quick17/zhangsan17
    @RequestMapping(value = "/quick17/{name}",produces = "application/json;charset=utf-8")
    @ResponseBody
    public void save17(@PathVariable(value = "name") String username) throws Exception {
        System.out.println(username);
    }

    //下面演示获取请求数据--自定义类型转换器
    @RequestMapping(value = "/quick18",produces = "application/json;charset=utf-8")
    @ResponseBody
    public void save18(Date date) throws Exception {
        System.out.println(date);
    }

    //下面演示获取请求数据--servlet的api
    @RequestMapping(value = "/quick19",produces = "application/json;charset=utf-8")
    @ResponseBody
    public void save19(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws Exception {
        System.out.println("req:"+request);
        System.out.println("resp:"+response);
        System.out.println("session:"+session);
    }

    //下面演示获取请求数据--请求头
    @RequestMapping(value = "/quick20",produces = "application/json;charset=utf-8")
    @ResponseBody
    public void save20(@RequestHeader(value = "User-Agent") String user_agent) throws Exception {
        System.out.println(user_agent);
    }

    //下面演示获取请求数据--cookie头
    @RequestMapping(value = "/quick21",produces = "application/json;charset=utf-8")
    @ResponseBody
    public void save21(@CookieValue(value = "JSESSIONID") String jsessionion) throws Exception {
        System.out.println(jsessionion);
    }
}

1 获得基本类型参数

在这里插入图片描述

代码见quick11:
输入http://localhost:8080/user/quick11?username=%22wuli%22&age=11
在这里插入图片描述

2.获得POJO类型参数

在这里插入图片描述

User类:

package cn.itcast.domain;

/**
 * @author QLBF
 * @version 1.0
 * @date 2021/1/19 10:09
 */
public class User {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

上面代码quick12:浏览器输入
http://localhost:8080/user/quick12?name=“zhangsan”&age=10
控制台输出:
在这里插入图片描述

3 获得数组类型参数

在这里插入图片描述

代码见quick13:
浏览器输入http://localhost:8080/user/quick13?strs=”aaa”&strs=“bbb”&strs=“ccc”
控制台输出:
在这里插入图片描述

4.1获得集合类型参数(集合有对象-表单提交)

在这里插入图片描述
新建domain包里面VO集合类(里面含User对象):

package cn.itcast.domain;

import java.util.List;

/**
 * @author QLBF
 * @version 1.0
 * @date 2021/1/19 21:49
 */
public class VO {
    private List<User> userList;

    @Override
    public String toString() {
        return "VO{" +
                "userList=" + userList +
                '}';
    }

    public List<User> getUserList() {
        return userList;
    }

    public void setUserList(List<User> userList) {
        this.userList = userList;
    }
}

在webapp直接建一个form.jsp表单提交:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false"%>

<html>
<head>
    <title>获取集合演示</title>
</head>
<body>

<form action="${pageContext.request.contextPath}/user/quick14" method="post">
    <%--需表明是第几个User对象的name age--%>
    <%--name属性需写你的VO类的属性名,.后写你的User类的属性名--%>
    <input type="text" name="userList[0].name"><br>
    <input type="text" name="userList[0].age"><br>

    <input type="text" name="userList[1].name"><br>
    <input type="text" name="userList[1].age"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

重点jsp经常乱码啥的记得加:
<%@page isELIgnored=“false”%>
quick14:
浏览器访问:http://localhost:8080/form.jsp
在这里插入图片描述提交中文会乱码,等下加个过滤器就行:
在这里插入图片描述

正确的控制台输出:在这里插入图片描述-------------------------------------------------------------------------------

4.2获得集合类型参数(集合有对象-ajax提交)

刚刚是通过form表单提交,下面通过Ajax提交
在这里插入图片描述
就可以不用VO类了,但有时候你要根据前端的需要封装类的集合和一些其他属性的话,那么就要使用VO(随便起名)了,因为你一个List<类>,这个类还不包括你前端还需要的一些属性
在这里插入图片描述在web添加js/jquery-3.3.1.js文件进去
在webapp新建ajax.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false"%>

<html>
<head>
    <title>获取集合演示-ajax提交</title>
    <script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js"></script>
    <script>
        var userList=new Array();
        // 下面的name要和你User对象的属性名一样
        userList.push({name:"wugang",age:10});
        userList.push({name:"lisi2",age:10});

        $.ajax({
           type:"POST",
           url:"${pageContext.request.contextPath}/user/quick15",
            data:JSON.stringify(userList),
            contentType:"application/json;charset=utf-8"
        });
    </script>
</head>

<body>

</body>
</html>

直接在ajs.jsp加载js/jquery-3.3.1.js会找不到:
在这里插入图片描述

得在springmvc-xml配置开发资源的访问:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd
                            http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc.xsd">


<!--context:include-filter代表只扫cn.itcast的org.springframework.stereotype.Controller的注解-->
<context:component-scan base-package="cn.itcast">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:include-filter>
</context:component-scan>


<!--配置内部资源视图解析器,viewResolver是随便起的id-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--简化/view/test1.jsp-->
    <property name="prefix" value="/view/"></property>  <!--改前缀,view是你项目webapp下的一个目录,可以改为其他的目录-->
    <property name="suffix" value=".jsp"></property>    <!--改后缀-->
</bean>


    <!--mvc的注解驱动,必须加,不然回写对象和集合会很麻烦-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--开发资源的访问-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
</beans>

代码见quick15:
浏览器输入:http://localhost:8080/ajax.jsp
控制台会输出ajax.jsp里面给它的内容:

在这里插入图片描述
4.的集合返回中文都会乱码:下面来解决:

5.请求数据乱码问题

在这里插入图片描述

在web.xml配置过滤器:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

    <!--配置全局过滤的filter-->
    <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>

    <!--配置SpringMVC的前端控制器-->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!--contextConfigLocation是随便起的-->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--全局初始化参数,contextConfigLocation是随便起的-->
    <!--<context-param>-->
        <!--<param-name>contextConfigLocation</param-name>-->
        <!--<param-value>classpath:applicationContext.xml</param-value>-->
    <!--</context-param>-->

    <!--配置监听器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextCleanupListener</listener-class>
    </listener>
</web-app>

第四点就可以提交中文也不会出错了。
在这里插入图片描述
在这里插入图片描述

6.参数绑定注解@requestParam

在这里插入图片描述

在这里插入图片描述
quick16:
浏览器输入:http://localhost:8080/user/quick16?name11=‘’zhangsan16‘’
控制台输出:
在这里插入图片描述

7.Restful

在这里插入图片描述了解即可:
在这里插入图片描述
quick17:
浏览器输入:(这里直接用/而不是用?了)
http://localhost:8080/user/quick17/zhangsan17
控制台输出:
在这里插入图片描述

8.自定义类型转换器(对日期有用)在这里插入图片描述

1.新建一个DateConverter的java类:

package cn.itcast.converter;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author QLBF
 * @version 1.0
 * @date 2021/1/20 10:11
 */
public class DateConverter implements Converter<String,Date>{
    public Date convert(String dateStr) {
        //将日期字符串转换成日期对象 返回
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
        Date date=null;
        try {
             date=format.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;

    }
}

在这里插入图片描述
springmvc.xml改:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd
                            http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc.xsd">


<!--context:include-filter代表只扫cn.itcast的org.springframework.stereotype.Controller的注解-->
<context:component-scan base-package="cn.itcast">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:include-filter>
</context:component-scan>


<!--配置内部资源视图解析器,viewResolver是随便起的id-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--简化/view/test1.jsp-->
    <property name="prefix" value="/view/"></property>  <!--改前缀,view是你项目webapp下的一个目录,可以改为其他的目录-->
    <property name="suffix" value=".jsp"></property>    <!--改后缀-->
</bean>


    <!--mvc的注解驱动,必须加,不然回写对象和集合会很麻烦-->
    <mvc:annotation-driven conversion-service="conversionService1"></mvc:annotation-driven>

    <!--开发资源的访问-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>

    <!--声明转换器-->
    <bean id="conversionService1" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="cn.itcast.converter.DateConverter"></bean>
            </list>
        </property>
    </bean>

</beans>

quick18:
浏览器输入:
http://localhost:8080/user/quick18?date=2020-10-12(记得加date,若你输入的是/分割的日期则不用加自定义的转换器)
控制台输出:
在这里插入图片描述

8. 获得Servlet相关API(@RequestHeader、)

在这里插入图片描述quick19:
浏览器输入:http://localhost:8080/user/quick19
控制台输出:在这里插入图片描述

在这里插入图片描述quick20:
浏览器输入:http://localhost:8080/user/quick20
控制台输出:
在这里插入图片描述

在这里插入图片描述
quick21:
浏览器输入:http://localhost:8080/user/quick21
控制台输出:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值