文章目录:
1.控制器controller方法的返回值
1.1 返回值类型:ModelAndView
1.2 返回值类型:String(这里的String是视图)
1.2.1 控制器类
1.2.2 springmvc配置文件
1.2.3 index.jsp
1.2.4 web.xml
1.2.5 运行结果
1.3 返回值类型:void
1.3.1 控制器类
1.3.2 springmvc配置文件与之前的例子相同
1.3.3 index.jsp
1.3.4 web.xml与之间的例子相同
1.3.5 运行结果
1.4 返回值类型:Object(可以是自定义Student类、List集合、Map集合等等)
1.4.1 控制器类
1.4.2 springmvc配置文件
1.4.3 index.jsp
1.4.4 web.xml与之前的例子相同
1.4.5 运行结果
1.5 返回值类型:String(这里的String是数据)
1.5.1 控制器类
1.5.2 springmvc配置文件
1.5.3 index.jsp
1.5.4 web.xml与之前的例子相同
1.5.5 运行结果
2.控制器类中的方法返回对象转为json的步骤
1.控制器controller方法的返回值
使用@Controller 注解的处理器的处理器方法,其返回值常用的有四种类型:
- 第一种:ModelAndView
- String
- void
- 返回自定义类型对象
1.1 返回值类型:ModelAndView
若处理器方法处理完后,需要跳转到其它资源,且又要在跳转的资源间传递数据,此时处理器方法返回 ModelAndView 比较好。当然,若要返回 ModelAndView,则处理器方法中需要定义 ModelAndView 对象。
在使用时,若该处理器方法只是进行跳转而不传递数据,或只是传递数据而并不向任何资源跳转(如对页面的 Ajax 异步响应),此时若返回 ModelAndView,则将总是有一部分多余:要么 Model 多余,要么 View 多余。即此时返回 ModelAndView 将不合适。
1.2 返回值类型:String(这里的String是视图)
处理器方法返回的字符串可以指定逻辑视图名,通过视图解析器解析可以将其转换为物理视图地址。
1.2.1 控制器类
package com.songzihao.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.songzihao.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@Controller
public class MyController {
/**
* 控制器方法返回String,表示逻辑名称,需要项目中配置视图解析器
*/
@RequestMapping(value = {"/return-string-view.do"})
public String doReturnStringView1(HttpServletRequest request,String name, Integer age) {
System.out.println("执行了MyController的doReturnStringView1方法,name=" + name + ",age=" + age);
//处理数据
request.setAttribute("myName",name);
request.setAttribute("myAge",age);
//使用视图解析器,返回结果,forward,转发到show.jsp
return "show";
//如果不使用视图解析器,则需要写成下面这样
//return "/WEB-INF/view/show.jsp";
}
}
1.2.2 springmvc配置文件
1.2.3 index.jsp
接受请求参数
控制器返回String-逻辑视图名称
姓名:
年龄:
1.2.4 web.xml
DispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
DispatcherServlet
*.do
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
forceRequestEncoding
true
forceResponseEncoding
true
CharacterEncodingFilter
/*
1.2.5 运行结果
1.3 返回值类型:void
1.3.1 控制器类
package com.songzihao.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.songzihao.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@Controller
public class MyController {
/**
* 控制器方法返回void,响应ajax请求,使用HttpServletResponse输出数据
*/
@RequestMapping(value = {"/return-void-ajax.do"})
public void returnVoidAjax(HttpServletResponse response,String name, Integer age) throws IOException {
System.out.println("处理void返回类型:name=" + name + ",age=" + age);
Student student=new Student();
student.setName(name);
student.setAge(age);
//把对象转为json
ObjectMapper om=new ObjectMapper();
String json=om.writeValueAsString(student);
System.out.println("服务器对象转为json===" + json);
//输出json,响应ajax
response.setContentType("application/json;charset=utf-8");
PrintWriter pw=response.getWriter();
pw.println(json);
pw.flush();
pw.close();
}
}
1.3.2 springmvc配置文件与之前的例子相同
1.3.3 index.jsp
接受请求参数
$(function () {
$("#myButton").on("click",function () {
$.ajax({
url: "return-void-ajax.do",
//url: "doStudentJson.do",
//url: "doStringData.do",
data: {
name: "张起灵",
age: 20
},
dataType: "json",
//dataType: "text",
success: function (resp) {
// resp=XMLHttpRequest.responseText;
alert("name===" + resp.name + ",age===" + resp.age);
//alert(resp);
}
})
})
})
控制器返回String-逻辑视图名称
姓名:
年龄:
1.3.4 web.xml与之间的例子相同
1.3.5 运行结果
1.4 返回值类型:Object(可以是自定义Student类、List集合、Map集合等等)
1.4.1 控制器类
package com.songzihao.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.songzihao.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@Controller
public class MyController {
/**
* 控制器方法返回Student-----json
*
* 框架处理模式:
* 1. 框架根据控制器方法的返回值类型,找到HttpMessageConverter接口的实现类,
* 最后找到的是MappingJackson2HttpMessageConverter
*
* 2. 使用实现类MappingJackson2HttpMessageConverter,执行它的write()方法,
* 把Student对象转为了json格式的数据
*
* 3. 框架使用@ResponseBody注解,把2中的json数据输出给了浏览器
* 设置了content-type: application/json;charset=utf-8
*/
@RequestMapping(value = "/doStudentJson.do")
@ResponseBody
public Student doAjaxJson(String name,Integer age) {
System.out.println("控制器方法返回自定义对象Student,转为Json:" + name + "," + age);
Student student=new Student();
student.setName(name);
student.setAge(age);
return student;
}
}
1.4.2 springmvc配置文件
1.4.3 index.jsp
接受请求参数
$(function () {
$("#myButton").on("click",function () {
$.ajax({
//url: "return-void-ajax.do",
url: "doStudentJson.do",
//url: "doStringData.do",
data: {
name: "张起灵",
age: 20
},
dataType: "json",
//dataType: "text",
success: function (resp) {
// resp=XMLHttpRequest.responseText;
alert("name===" + resp.name + ",age===" + resp.age);
//alert(resp);
}
})
})
})
控制器返回String-逻辑视图名称
姓名:
年龄:
1.4.4 web.xml与之前的例子相同
1.4.5 运行结果
1.5 返回值类型:String(这里的String是数据)
1.5.1 控制器类
package com.songzihao.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.songzihao.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@Controller
public class MyController {
/**
* 控制器方法返回String,这里是数据
*
* 区分返回值String是数据还是视图
* 1.方法上面有 @ResponseBody 注解,就是数据
* 2.方法上面没有 @ResponseBody 注解,就是视图
*
* 框架处理String返回值
* 1.框架使用StringHttpMessageConverter
* 2.StringHttpMessageConverter默认的字符集编码是ISO_8859_1
* 3.使用 @RequestMapping 注解中的produces属性进行修改:produces = "text/plain;charset=utf-8"
*/
@RequestMapping(value = {"/doStringData.do"},produces = "text/plain;charset=utf-8")
@ResponseBody
public String doStringData(String name,Integer age) {
System.out.println("控制器方法返回String,是数据");
return "Hello SpringMVC注解式开发";
}
}
1.5.2 springmvc配置文件
1.5.3 index.jsp
接受请求参数
$(function () {
$("#myButton").on("click",function () {
$.ajax({
//url: "return-void-ajax.do",
//url: "doStudentJson.do",
url: "doStringData.do",
data: {
name: "张起灵",
age: 20
},
//dataType: "json",
dataType: "text",
success: function (resp) {
// resp=XMLHttpRequest.responseText;
//alert("name===" + resp.name + ",age===" + resp.age);
alert(resp);
}
})
})
})
控制器返回String-逻辑视图名称
姓名:
年龄:
1.5.4 web.xml与之前的例子相同
1.5.5 运行结果
2.控制器类中的方法返回对象转为json的步骤
- 在pom.xml文件中加入 jackson 依赖,springmvc框架处理json时,默认使用的是jackson。
- 在springmvc配置文件中,加入注解驱动标签: 。
- 在控制器方法的上面加入 @ResponseBody 注解,表示将返回值数据输出给浏览器。