SpringMVC(三):返回值类型和json交互

返回值类型和json交互

1. 控制器方法的返回值类型

  • String

  • void

  • ModelAndView

    演示和说明的代码

package com.zmysna.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.View;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

@Controller
public class MethodReturnController {

    /**
     * 1. 控制器方法返回 String
     * 说明: controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址
     */
    @RequestMapping("returnMapping")
    public String returnString() {
        System.out.println("返回字符串");
        return "success";
    }

    /**
     * 2. 控制器方法返回 void
     * 在 controller 方法形参上可以定义 request 和 response ,使用 request 或 response指定响应结果:
     */
    @RequestMapping("returnVoid")
    public void returnVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      //转发
      request.getRequestDispatcher("/pages/success.jsp").forward(request,response);

        //重定向
        response.sendRedirect("/pages/success.jsp");
    }

    /**
     * 通过model和modelMap接收ExtendedModelMap。设置request域的属性值。
     */
    @RequestMapping("model")
    public String modelTest(Model model, ModelMap modelMap) {
        model.addAttribute("model", "modelValue");
        modelMap.addAttribute("modelMap", "modelMapValue");
        return "success";
    }

    /**
     * 3. 控制器方法返回 ModelAndView
     * ModelAndView 是 SpringMVC 为我们提供的一个对象,包含了逻辑视图和模型数据
     */
    @RequestMapping("mv")
    public ModelAndView mv() {
        ModelAndView mv = new ModelAndView();
        //往request域中添加对象
        mv.addObject("mv","mv");
        //设置逻辑视图名
        mv.setViewName("success");
        return mv;
    }
}

​ 视图界面success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>success</title>
</head>
<body>
<!--通过el表达式获取域中的值-->
${model}
${modelMap}
${mv}
</body>
</html>

2. springmvc的转发和重定向

​ 控制器返回提供String返回值时默认就是请求转发,返回的值是逻辑视图名,经过视图解析器解析为实际视图。如果用 forward ,路径名称必须是实际的视图名称。使用 redirect 可以实现重定向,路径名称同样是实际的视图名称

@Controller
public class ForwardAndRedirectController {
    @RequestMapping("forward")
    public String forwardTest(){
        System.out.println("转发");
        return "forward:/pages/success.jsp";
    }

    @RequestMapping("redirect")
    public String RedirectTest() {
        System.out.println("重定向");
        return "redirect:/pages/success.jsp";
    }
}

3. 接收json数据和返回json数据

  1. @RequestBody
    作用:在处理器方法形参上使用,把请求的 json 格式数据,转换成 java 对象。
  2. @ResponseBody
    作用:在处理器方法返回值上使用,或者方法上使用。把响应的 java 对象,转换成 json 格式数据。

​ springmvc 默认,使用 HttpMessageConverter 消息转换器,进行 json 格式数据转换。需要加入 jackson 依赖包支持。使用maven进行依赖导入

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-core</artifactId>
 	<version>2.9.0</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.9.0</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-annotations</artifactId>
	<version>2.9.0</version>
</dependency>
  • 前端发送请求,参数为json数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>success</title>
</head>
<body>
${model}
${modelMap}
${mv}
<p id="ajaxPost">ajaxPost</p>
</body>
<script src="../js/jquery-3.3.1.js"
        type="text/javascript"></script>
<script>
    $(function () {
        $("#ajaxPost").click(function () {
            $.post({
                // 请求地址
                url: "/responseBodyJson",
                // 发送给后台的 ajax 数据
                data: '{"id":100,"name":"jack","money":9.9}',
                // 后台返回的数据格式
                dataType: "json",
                // 请求格式与编码
                contentType: "application/json;charset=utf-8",
                // 返回json数据
                success: function (jsn) {
                    alert("jsn=" + jsn + "; jsn.id=" + jsn.id + ";")
                    jsn.name = "+jsn.name+";
                    jsn.money = "+jsn.money)";
                }
            });
        });
    });
</script>
</html>
  • 后台接收json数据,用@RequestBody封装为User对象,用@ResponseBody将User对象转为json字符串并返回。
@Controller
public class JsonController {
    @RequestMapping(value = "responseBodyJson")
    @ResponseBody
    public User body(@RequestBody User user) {
        System.out.println(user);
        return user;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值