SpringMVC笔记(三): 数据响应

107 阅读3分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路

数据响应的方式

页面跳转

直接返回字符串

这种方法会将返回的字符串与视图解析器的前后缀拼接后跳转 在这里插入图片描述 返回带有前缀字符串: 转发:forward :/WEB-INF/view/index.jsp 重定向: redirect: /index.jsp

再spring-mvc.xml中配置内部资源解析器

<!--配置内部资源视图解析器-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--/jsp/success.jsp-->
        <property name="prefix" value="/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
通过ModelAndView对象返回

Model : 模型--->封装数据 View: 视图-->展示数据

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping(value = "/quick2")//请求映射
    public ModelAndView save2(){
       ModelAndView modelAndView = new ModelAndView();
       //设置模型数据
        modelAndView.addObject("username","wu");
       //设置视图名称
        modelAndView.setViewName("success");
       return modelAndView;
    }

在这里插入图片描述 ModelAndView的方式2

@RequestMapping(value = "/quick3")//请求映射
    public ModelAndView save3(ModelAndView modelAndView){
        modelAndView.addObject("username","wu");
        modelAndView.setViewName("success");
        return modelAndView;
    }

原始方式

    @RequestMapping(value = "/quick5")//请求映射
    public String save5(HttpServletRequest request){
        request.setAttribute("username","wuyongzhao");
        return "success";
    }

回写数据

直接返回字符串

Web基础阶段, 客户端访问服务器, 如果想直接回写字符串作为响应体返回的话, 只需使用response.getWriter().print( "hello world" )即可

在Controller中回写字符串:

①通过Spring MVC框架注入response对象, 使用response.getWriter().print("hello world ")回写数据,此时不需要视图跳转, 业务方法返回值为void

    @RequestMapping(value = "/quick6")//请求映射
    public void save6(HttpServletResponse response) throws IOException {
       response.getWriter().print("hello world");
    }

②将需要回写的字符串字节返回, 但此时需要通过@ResponseBody注解告知SpringMVC框架, 方法返回的字符串不是跳转是直接在http响应体中返回

    @RequestMapping(value = "/quick7")//请求映射
    @ResponseBody//告知SpringMVC框架不进行视图跳转, 直接进行数据响应
    public String save7() throws IOException {
        return "hello world";
    }
直接回写Json格式字符串
	@RequestMapping(value = "/quick8")//请求映射
    @ResponseBody
    public String save() throws IOException {
        return "{\"username\":\"zhangsan\",\"age\":18}";
    }

下面通过对象的形式来回写json数据格式

  1. 在pom.xml中导入json 的坐标
	<!--导入Json坐标-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.0</version>
        </dependency>
  1. 准备好对象
package com.domain;

public class User {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

回写成json格式

@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping(value = "/quick9")//请求映射
    @ResponseBody
    public String save9() throws IOException {
        User user = new User();
        user.setName("lisi");
        user.setAge(18);
        //使用json转换工具: 将对象转换成json格式的字符串
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(user);
        return json;
    	}
	}

在这里插入图片描述

返回对象或集合

在spring-mvc.xml中配置处理器映射器

	<!--配置处理器映射器-->
    <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>
@Controller
@RequestMapping("/user")
public class UserController {

    //返回对象或集合
    //期望SpringMVC自动将User转换成json格式字符串
    @RequestMapping(value = "/quick10")//请求映射
    @ResponseBody
    public User save10() throws IOException {
        User user = new User();
        user.setName("lisi");
        user.setAge(20);

        return user;
    }
}

在方法上添加@ResponseBody就可以返回json格式的字符串, 但是这样配置比较麻烦, 配置的代码比较多, 因此我们可以使用mvc的注解驱动替代上述配置 在这里插入图片描述 在SpringMVC的各个组件中, 处理器映射器, 处理器适配器, 视图解析器称为 SpringMVC的三大组件

使用<mvc:annotation-driven> 自动加载RequestMappingHandlerMapping(处理映射器)和RequestMappingHandlerAdapter(处理器适配器), 可用在Spring-mvc.xml配置文件中使用<mvc:annotation-driven> 替代注解处理器和适配器的配置

同时使用<mvc:annotation-driven>默认底层就会集成Jackson进行对象或集合的json格式字符串的转换

具体操作

在spring-xml文件中相对应的位置加上这两行配置代码

 xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

在这里插入图片描述 在spring-xml文件中加上<mvc:annotation-driven> , 并把先前的配置处理器映射器的代码注释调 在这里插入图片描述 启动服务器 在这里插入图片描述