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

返回值类型和json交互

文章目录

    • 返回值类型和json交互
      • 1. 控制器方法的返回值类型
      • 2. springmvc的转发和重定向
      • 3. 接收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" %>


    success



${model}
${modelMap}
${mv}


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.coregroupId>
	<artifactId>jackson-coreartifactId>
 	<version>2.9.0version>
dependency>
<dependency>
	<groupId>com.fasterxml.jackson.coregroupId>
	<artifactId>jackson-databindartifactId>
	<version>2.9.0version>
dependency>
<dependency>
	<groupId>com.fasterxml.jackson.coregroupId>
	<artifactId>jackson-annotationsartifactId>
	<version>2.9.0version>
dependency>
  • 前端发送请求,参数为json数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    success


${model}
${modelMap}
${mv}

ajaxPost

  • 后台接收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;
    }
}

你可能感兴趣的:(SSM)