Spring Controller方法返回值类型

本文介绍了Spring MVC中四种常见的返回类型及其应用场景:String类型用于返回视图路径;ModelAndView类型可携带参数到视图;void类型配合PrintWriter返回简单文本;Object类型结合Jackson实现JSON数据的返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种:返回String类型

1、返回String类型的演示代码如图所示:

@RequestMapping("/returnString")
public String returnString() {
	return "/returnDemo/returnString";
	// 返回视图的的路径
	// <property name="prefix" value="/WEB-INF/jsp"></property>
	// <property name="suffix" value=".jsp"></property>
	// 指向 /WEB-INF/jsp/returnDemo/returnString.jsp
}

2、由于spring¬mvc.xml中关于视图解析部分的配置,如图所示:

 <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
 <!-- 跳转的时候只用写jsp的名字,不用带后缀,因为默认后缀“.jsp”,路径为“/WEB-INF/jsp” -->
 <!-- WEB-INF目录是受保护的目录,在浏览器中是无法访问的  -->
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
     <property name="prefix" value="/WEB-INF/jsp"></property>
     <property name="suffix" value=".jsp"></property>
 </bean>

3、返回的视图为 /WEB¬INF/jsp/returnDemo/returnString.jsp页面,如图所示: 在这里插入图片描述

第二种:返回ModelAndView类型

1、返回ModelAndView类型的演示代码。ModelAndView相对于String的返回类型的优势,可以携带参数传递到页面。如图所示:

/**
 * 注意ModelAndView 引用的是 org.springframework.web.servlet.ModelAndView
 * 
 * @return
 */
@RequestMapping("/returnModelAndView")
public ModelAndView returnModelAndView() {
	ModelAndView mv = new ModelAndView("/returnDemo/returnModelAndView"); 
	// 指向//WEB-INF/jsp/returnDemo/returnModelAndView.jsp
	// 传递参数到视图**(传递参数的名称,传递参数的值)
	mv.addObject("strName", "ModelAndView传递参数到视图 aabbcc");
	return mv;
}

2、jsp页面可以通过EL表达式获取ModelAndView传递的参数,如图所示:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'returnModelAndView.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    returnModelAndView的视图<br>
    ${strName}
  </body>
</html>

第三种:返回void类型

1、返回void类型一般配合PrintWriter使用,和Servlet用法类似。如图所示:

/**
 * 和 servlet用法一致,通过流去返回内容,一般使用较少,无需创建jsp
 * 
 * @param pw
 */
@RequestMapping("/returnVoid")
public void returnVoid(PrintWriter pw) {
	pw.write("Hello World,returnVoid");
	pw.close();
}

第四种:返回Object类型

1、SpringMVC返回json需要使用 jackson ,需要向项目中添加相关的包,如图所示:
在这里插入图片描述
PS:jackson的相关jar包下载(提取码:puvm)

2、编写Controller的方法
SpingMVC中返回JSON格式代码如下,说明如图所示:

package com.gx.web;

import net.sf.json.JSONSerializer;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.gx.po.User;

@Controller
@RequestMapping("/JsonDemo")
public class JsonDemoController {

	@RequestMapping("/form")
	public String form() {
		return "/jsonDemo/form";
	}

	@ResponseBody
	@RequestMapping(value = "/retrunJson", produces = "application/json")
	public Object retrunJson(User user) {
		System.out.println("userName=" + user.getUserName());
		System.out.println("password=" + user.getPassword());
		user.setUserName(user.getUserName() + "_Json数据");
		return JSONSerializer.toJSON(user);
	}
}

3、编写JSP
在JSP页面中使用JQuery的ajax请求刚刚编写的方法,jsp页面代码说明如图所示:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set value="${pageContext.request.contextPath}" scope="page" var="ctx"></c:set>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'form.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  	<!-- 注意:js、css等插件放在WebRoot目录下,如果放在WEB-INF下浏览器是不能直接访问的 -->
    <script type="text/javascript" src="${ctx}/js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
    	
    	$.post("${ctx}/JsonDemo/retrunJson.do",{userName:"小明",password:"123"},function(data){
    		console.log(data);
    	},"json");/* 尽量指定"json"格式,不然date返回可能是字符串 */
    	
    </script>
  </body>
</html>

4、测试
在浏览器中访问http://127.0.0.1:8080/Demo05SpringMVC/JsonDemo/toForm.do, 测试结果如图所示:
在这里插入图片描述

附前三种Controller详细源码:

package com.gx.web;

import java.io.PrintWriter;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/ReturnDemo")
public class ReturnDemoController {

	@RequestMapping("/returnString")
	public String returnString() {
		return "/returnDemo/returnString";
		// 返回视图的的路径
		// <property name="prefix" value="/WEB-INF/jsp"></property>
		// <property name="suffix" value=".jsp"></property>
		// 指向 /WEB-INF/jsp/returnDemo/returnString.jsp
	}

	/**
	 * 注意ModelAndView 引用的是 org.springframework.web.servlet.ModelAndView
	 * 
	 * @return
	 */
	@RequestMapping("/returnModelAndView")
	public ModelAndView returnModelAndView() {
		ModelAndView mv = new ModelAndView("/returnDemo/returnModelAndView"); 
		// 指向//WEB-INF/jsp/returnDemo/returnModelAndView.jsp
		// 传递参数到视图**(传递参数的名称,传递参数的值)
		mv.addObject("strName", "ModelAndView传递参数到视图 aabbcc");
		return mv;
	}

	/**
	 * 和 servlet用法一致,通过流去返回内容,一般使用较少,无需创建jsp
	 * 
	 * @param pw
	 */
	@RequestMapping("/returnVoid")
	public void returnVoid(PrintWriter pw) {
		pw.write("Hello World,returnVoid");
		pw.close();
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值