首页 > 其他分享 >SpringMVC系列之(九)响应数据和结果视图

SpringMVC系列之(九)响应数据和结果视图

时间:2024-02-28 09:03:12浏览次数:38  
标签:SpringMVC Controller springframework 响应 json 视图 import org user

响应数据和结果视图

1. 返回值分类

这里的返回值指的是Controller中的方法的返回值。

1.1 String

该字符串为逻辑视图名,通过视图解析器解析为物理视图地址。
注:底层调用的是ModelAndView

1.1.1 实际开发中的应用

实体类
在这里插入图片描述

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: 商务小本本
  Date: 2022/3/3
  Time: 23:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="test/testString">返回值为String</a>
</body>
</html>

Controller

package cn.itcast.controller;

import cn.itcast.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author 商务小本本
 */
@RequestMapping("/test")
@Controller
public class ReturnValue {

    @RequestMapping("/testString")
    public String testString(Model model){
        System.out.println("testString执行了。。。。");
        //模拟从数据库中查出User对象
        User user = new User();
        user.setAge(30);
        user.setPassword("dsfsgjfdshj");
        user.setUsername("hdskfadsgfdsghk");
        model.addAttribute("user", user);
        return "success";
    }
}

success.jsp

<%--
  Created by IntelliJ IDEA.
  User: 商务小本本
  Date: 2022/3/3
  Time: 23:37
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <h3>入门成功!</h3>
    ${user.toString()}
</body>
</html>

1.2 void

当返回值为void时,会有一个默认的跳转页面
在这里插入图片描述
这个路径的构成
在这里插入图片描述
注:返回值为void,可以跳转页面也可以直接作出响应

1.2.1 手动跳转页面

请求转发
在这里插入图片描述
重定向
在这里插入图片描述
注:重定向是不能直接访问WEB-INF目录的,此外,重定向需要在路径上添加项目名称

1.2.2 直接响应

在这里插入图片描述
在这里插入图片描述
如果需要输出中文,进行如下处理
在这里插入图片描述

1.3 ModelAndView对象

需求:前端发送请求到控制器,控制器模拟查询数据库,将查询出的对象存入request域中,跳转页面,显示查询出的对象。

package cn.itcast.controller;

import cn.itcast.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author 商务小本本
 */
@Controller
@RequestMapping("/test")
public class HelloController {

    @RequestMapping("/testVoid")
    public ModelAndView testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception{
        ModelAndView modelAndView = new ModelAndView();

        //模拟从数据库中查询出user对象
        User user = new User();
        user.setName("jasdjkasgdgjasdhkj");

        //把user对象存储到modelAndView对象中,底层会把user对象存入request域对象中
        modelAndView.addObject("user", user);

        //跳转到的页面,利用视图解析器进行跳转
        modelAndView.setViewName("success");
        return modelAndView;
    }
}

2. 使用forward、redirect关键字实现请求转发和重定向(SpringMVC框架提供的方式)

注:不支持视图解析器,路径写全
在这里插入图片描述

3. @ResponseBody响应json数据

1. 应用场景

前端发送Ajax异步请求,请求数据,后端通过json串的方式返回,也叫接口开发

2. 过滤静态资源

web.xml中对DispatcherServlet的配置会拦截所有资源,当页面中访问内部的js等静态资源时就会出现404
在这里插入图片描述
比如下面的示例:
jsp

<%--
  Created by IntelliJ IDEA.
  User: 商务小本本
  Date: 2022/3/3
  Time: 23:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery-3.6.0.min.js"></script>
    <script>
        $(function () {
            $("#btn").click(function () {
                alert("hello");
            });
        });

    </script>
</head>
<body>
    <button id="btn">发送Ajax请求</button>
</body>
</html>

在这里插入图片描述
静态资源被拦截了

springmvc.xml中添加

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

在这里插入图片描述

3. 发送Ajax请求

jsp

<%--
  Created by IntelliJ IDEA.
  User: 商务小本本
  Date: 2022/3/3
  Time: 23:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery-3.6.0.min.js"></script>
    <script>
        $(function () {
            $("#btn").click(function () {
                $.ajax({
                   url:"test/testVoid",
                    contentType:"application/json;charset=UTF-8",
                    data:'{"name":"lisi", "gender":"nan", "money":"123", "date":"2022/11/11"}',
                    dataType:"json",
                    type:"post",
                    success:function (data) {

                    }
                });
            });
        });

    </script>
</head>
<body>
    <button id="btn">发送Ajax请求</button>
</body>
</html>

关于ajax的几个属性

属性 功能
url:"test/testVoid" 请求后端的地址
contentType:"application/json;charset=UTF-8" 发送数据至服务器时内容编码类型,此处为json的MIME类型和编码
data:'{"name":"lisi", "gender":"nan", "money":"123", "date":"2022/11/11"}' 请求体携带的数据
dataType:"json" 预期服务器返回的数据类型
type:"post" 请求类型
success:function (data) {} 回调函数

Controller

package cn.itcast.controller;

import cn.itcast.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author 商务小本本
 */
@Controller
@RequestMapping("/test")
public class HelloController {

    @RequestMapping("/testVoid")
    public void testVoid(@RequestBody String body) throws Exception{
        System.out.println(body);
    }
}

在这里插入图片描述

4. 响应json格式数据

Controller中接收到前端传来的json串后,需要转成JavaBean对象,处理之后再转成json串传回客户端
这之间用到解析json的几个jar包,maven坐标如下:
在这里插入图片描述

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

通过SpringMVC提供的@RequestBody注解及上述几个jar包,可实现Ajax异步请求的请求体json数据转为JavaBean对象。
通过SpringMVC提供的@ResponseBody注解及上述几个jar包,可实现方法返回的JavaBean对象转为json串,供Ajax的回调函数(success)解析使用。

jsp

<%--
  Created by IntelliJ IDEA.
  User: 商务小本本
  Date: 2022/3/3
  Time: 23:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery-3.6.0.min.js"></script>
    <script>
        $(function () {
            $("#btn").click(function () {
                $.ajax({
                   url:"test/testVoid",
                    contentType:"application/json;charset=UTF-8",
                    data:'{"name":"lisi", "gender":"nan", "money":"123"}',
                    dataType:"json",
                    type:"post",
                    success:function (data) {
                        alert(data.name);
                        alert(data.gender);
                        alert(data.money);
                    }
                });
            });
        });

    </script>
</head>
<body>
    <button id="btn">发送Ajax请求</button>
</body>
</html>

Controller

package cn.itcast.controller;

import cn.itcast.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author 商务小本本
 */
@Controller
@RequestMapping("/test")
public class HelloController {

    @RequestMapping("/testVoid")
    public @ResponseBody User testVoid(@RequestBody User user) throws Exception{
        System.out.println(user);

        return user;
    }
}

在这里插入图片描述

标签:SpringMVC,Controller,springframework,响应,json,视图,import,org,user
From: https://www.cnblogs.com/wzzzj/p/18038909

相关文章

  • SpringMVC系列之(八)HiddentHttpMethodFilter过滤器
    HiddentHttpMethodFilter过滤器1.应用场景由于浏览器自身只支持发送get/post请求,其他请求方式并不支持,该过滤器用于模拟发送各种请求方式的请求(get/post/put/delete)Spring3.0提供2.浏览器发送PUT/DELETE请求的其他实现方式插件WebClient提供的静态方法HiddentHttpMetho......
  • SpringMVC系列之(六)自定义类型转换器
    自定义类型转换器SpringMVC在进行请求参数绑定时,自动进行了类型转换,前端传来的参数都是字符串,而控制器中的方法在接收时,可能会用到其他数据类型(如:Date、Integer、Double等),以日期类型为例,前端传的日期格式多样,SpringMVC自动转换类型的格式(2011/11/11)支持不了这么多类型,故有的日期......
  • SpringMVC系列之(五)POST请求中文乱码
    POST请求中文乱码1.配置解决中文乱码的过滤器web.xml中增加如下代码<filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><para......
  • SpringMVC系列之(四)请求参数的绑定
    请求参数的绑定获取前端传过来的参数的过程,如:Servlet的getParameter方法SpringMVC中的请求参数绑定:通过反射实现,SpringMVC中的请求参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的。1.支持的数据类型基本数据类型和字符串实体类型(JavaBean)集合数据类......
  • SpringMVC系列之(三)常用注解
    常用注解1.RequestMappingRequestMapping可以放在类上和方法上,放在类上表示一级目录,或表示某一个具体的模块属性path和value属性的作用相同method决定方法的请求方式params:请求必须包含的参数headers:请求必须包含的请求头以上的属性出现多个,需要同时满足2.RequestPa......
  • SpringMVC系列之(一)入门程序
    Web层,表现层入门程序1.需求描述页面上设置一个链接,点击链接后跳转到成功页面。2.搭建环境从骨架创建项目解决创建项目过慢的问题项目创建后,完善目录结构,创建相应的目录并设置目录类型源代码目录(java)和资源目录(resources)注:我这里已经设置过了,所以就不......
  • R语言汇率、股价指数与GARCH模型分析:格兰杰因果检验、脉冲响应与预测可视化
    全文链接:https://tecdat.cn/?p=35227原文出处:拓端数据部落公众号汇率和股价指数之间的联系是许多经济学家和投资者关注的重要议题。汇率和股价指数的波动对于经济体系的稳定和投资者的决策都具有重要影响。本文将帮助客户通过分析汇率和股价指数之间的联系,使用格兰杰因果检验和......
  • 智慧安防平台easy1400视图平台设备级联的操作流程
    在当今数字化时代,视频直播和点播已经成为人们获取信息和娱乐消遣的重要方式。为了满足不同场景下的直播需求,EasyDarwin视频直播点播平台提供了功能强大的支持。本文将重点介绍在EasyDarwin平台上进行拉流转推流操作,并深入探讨推流名称、源地址、控制选项等关键要素。一、EasyDarw......
  • ASP.NET Core 过滤器返回自定义响应数据
    自定义返回类publicclassApiResponse{publicintCode{get;set;}publicstringMessage{get;set;}publicobjectData{get;set;}publicApiResponse(intcode,stringmessage,objectdata=null){Code=code;......
  • 智慧安防平台easy1400视图平台设备级联的操作流程
    在上级平台中设置级联信息首先,您需要登录上级平台系统并打开首页。在左侧菜单栏中选择“下级平台”,然后点击“添加”按钮。接着,会弹出一个名为“新增下级视图库”的对话框。在这个对话框中,需要填写以下信息: 视图库ID:填写获取的下级视图库ID,可从下级视图库首页获取。名称:自定......