S++

千线一眼

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

SpringMVC-请求和响应

SpringMVC的数据响应

springmvc的数据响应分为两种方式:

  • 页面跳转
  • 回写数据

页面跳转

1. 返回字符串形式

直接返回字符串:此方式会将返回的字符串和视图解析器的前后缀拼接然后跳转。

@RequestMapping("/success")
public String success(){
  return "success";
}
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />

若有上面的视图解析器配置,则转发的资源地址就是 /jsp/success.jsp

2. 返回ModelAndView对象

    // 返回ModelAndView
    @RequestMapping("/success2")
    public ModelAndView print_test2(){
        /**
         * model 模型用来封装数据
         * view  视图用来展示视图
         */
        ModelAndView model_view = new ModelAndView();
        // 设置模型数据(键值对)
        model_view.addObject("name","sjj");
        // 设置视图名称
        model_view.setViewName("success");
        return model_view;
    }

此时我们可以将封装的数据显示在success.jsp中

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>测试</title>
</head>
<body>
<h1>成功 --- ${name}</h1>
</body>
</html>

这样访问 /success2 就能看见封装的数据了
当然你也可以将ModelAndView对象作为参数,SpringMVC会自动为你创建对象

    // 返回ModelAndView2
    @RequestMapping("/success3")
    public ModelAndView print_test3(ModelAndView model_view){
        // 设置模型数据(键值对)
        model_view.addObject("name","sjj2");
        // 设置视图名称
        model_view.setViewName("success");
        return model_view;
    }

回写数据

1. 回写字符串

    // 字符串回写
    @ResponseBody // 告诉SpringMVC是回写数据而不是跳转页面
    @RequestMapping("/success4")
    public String writeFun(HttpServletResponse response) {
        return "hello world";
    }

当然,在实际的开发过程中我们回返回更有用的字符串如json格式的字符串
这时候我们可以导入jackson相应的包来辅助开发

2. 返回对象

准备一个实体User类

package com.sjj.domain;

import org.springframework.stereotype.Component;

@Component("user")
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;
    }
}

编写返回User对象的方法

    @ResponseBody
    @RequestMapping("/success5")
    public User writeFun2(User user) {
        user.setName("sjj");
        user.setAge(19);
        return user;
    }

我们希望SpringMVC能自动帮我们把类转为json类型的字符串,因此需要在spring-mvc.xml中配置处理器映射器
先在pom.xml中导入依赖

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.10</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.10</version>
    </dependency>

然后编写处理器映射器

    <!--处理器映射器-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
            </list>
        </property>
    </bean>

有更简洁的配置方式

    <!--注解驱动-->
    <mvc:annotation-driven />

SpringMVC的请求数据

众所周知客户端请求参数的格式是 name1=value1&name2=value2...
服务器要获得请求的参数,有时需要进行数据的封装,SpringMVC可以接收如下参数:

  • 基本类型参数
  • POJO类型参数
  • 数组类型参数

获得基本类型参数

Controller中业务方法的参数名称要与请求参数的name一致,参数值回自动映射匹配

    @ResponseBody
    @RequestMapping("/success6")
    public void printRequest(String name,int age) {
        System.out.println(name);
        System.out.println(age);
    }

我们访问 http://localhost:8080/success6?name=sjj&age=19 会发现控制台返回了字符串sjj和整型19的基本类型数据

获得POJO类型参数

我们仍然是以上面的User类和访问的http://localhost:8080/success7?name=sjj&age=19为例,只不过我们只需要把接收的参数改为User

    @ResponseBody
    @RequestMapping("/success7")
    public void printRequest2(User user) {
        System.out.println(user);
    }

记得写toString方法更直观哦

获得数组类型参数

只要是name一致,数组也是可以接收的,比如这次我们访问 http://localhost:8080/success8?lis=1&lis=2&lis=3

    @ResponseBody
    @RequestMapping("/success8")
    public void printRequest3(String[] lis ) {
        System.out.println(Arrays.toString(lis));
    }

获得集合类型参数

当使用ajax提交时,可以提交contentType为json格式,那么在方法参数位置使用RequestMapping可以直接接收请求数据而无需进行POJO封装
先在spring-mvc.xml中开启静态资源访问

    <!--开放静态资源访问-->
    <mvc:resources mapping="/js/**" location="/js/" />
    <!--或者是交给原始容器来找静态资源-->
    <mvc:default-servlet-handler />

例如我们有这样一个页面,访问时为 http://localhost:8080/jsp/ajax.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>ajax</title>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.2.1.min.js"></script>
    <script>
        const userList = [];
        userList.push({name:"小A",age:18});
        userList.push({name:"小B",age:19});
        $.ajax({
            type:"POST",
            url:"${pageContext.request.contextPath}/success10",
            data:JSON.stringify(userList),
            contentType:"application/json;charset=utf-8"
        })
    </script>
</head>
<body>

</body>
</html>

对应的返回方法是

    @ResponseBody
    @RequestMapping("/success10")
    public void printRequest5(@RequestBody List<User> userList) {
        System.out.println(userList.toString());
    }

posted on   S++  阅读(46)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示