SpringMVC数据响应

本文详细讲解了SpringMVC中页面跳转与数据回写的两种方式,包括直接返回字符串、ModelAndView对象、以及利用HttpServletResponse进行JSON返回。涵盖了视图解析、参数传递和JSON处理的相关配置与实践。

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

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值