1. SpringMVC的数据响应方式
1.1. 页面跳转
- 直接返回字符串
- 通过ModelAndView对象返回
1.2. 回写数据
- 直接返回字符串
- 返回对象或集合
2. 页面跳转
2.1. 返回字符串形式
<!-- 配置内部资源视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 如:/jsp/quick.jsp ( / 表示从根目录下查找 )-->
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
@RequestMapping("/quick",method = [RequestMethod.GET], params = ["username"])
fun quickMethod(): String{
// forward:转发打开(默认)
// redirect:重定向
return "quick"
}
2.2. 返回ModelAndView对象
@RequestMapping("/quick2")
fun save2(): ModelAndView{
/*
Model: 模型 封装数据
View: 视图 展示数据
*/
val modelAndView = ModelAndView()
// 设置视图名称
modelAndView.viewName = "error"
// 设置模型数据(可以在视图中用$取出 -> $username)
modelAndView.addObject("username","name")
return modelAndView
}
@RequestMapping("/quick3")
// springmvc帮忙注入ModelAndView
fun save3(modelAndView: ModelAndView): ModelAndView{
// 设置视图名称
modelAndView.viewName = "error"
// 设置模型数据
modelAndView.addObject("username","name")
return modelAndView
}
@RequestMapping("/quick4")
fun save4(model: Model): String{
model.addAttribute("username","name")
return "error"
}
// 不常用
@RequestMapping("/quick5")
fun save5(request: HttpServletRequest): String{
request.setAttribute("username","name")
return "error"
}
3. 回写数据
3.1. 直接返回字符串
response.getWriter().print(“hello world”)
@RequestMapping("/quick6")
// 同理springmvc 注入 HttpServletResponse
fun save6(response: HttpServletResponse) {
val writer = response.writer
writer.println("hello world!")
}
// 通过注解@ResponseBody告诉springmvc,返回的字符串直接在http响应体中返回,而不是视图跳转
@ResponseBody
@RequestMapping("/quick7")
fun save7(response: HttpServletResponse):String {
return "hello world!"
}
@ResponseBody
@RequestMapping("/quick8")
fun save8(response: HttpServletResponse):String {
// 模拟json格式
return "{\"username\":\"zhangsan\",\"age\":\"18\"}"
}
引入json操作相关依赖
//引入jackson依赖
implementation 'com.fasterxml.jackson.core:jackson-core:2.13.0'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.0'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.13.0'
//引入json依赖
implementation 'com.google.code.gson:gson:2.8.6'
@ResponseBody
@RequestMapping("/quick9")
fun save9(response: HttpServletResponse):String {
// 使用已经创建好的User数据类
val user = User("lisi", 20)
// 使用json的转换工具将对象转换成json格式字符串返回
// gson 依赖
//val json = Gson().toJson(user)
// jackson-databind 依赖
val json = ObjectMapper().writeValueAsString(user)
return json
}
3.2. 返回对象或集合
@ResponseBody
@RequestMapping("/quick10")
// springmvc自动将User转换成json格式字符串
fun save10(response: HttpServletResponse):User {
return User("lisi", 20)
}
配置处理器映射,让springmvc自动将你返回的类处理成json
<!-- 配置处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</list>
</property>
</bean>
使用上述配置处理器映射方法比较麻烦,可以使用mvc注解驱动代替上述配置
<!-- 引入mvc命名空间 -->
<beans ...
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="...
http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
...
<!-- mvc注解驱动 -->
<mvc:annotation-driven/>
</beas>