SpringMVC框架学习记录 3 响应方式

数据响应方式

SpringMVC 对于前端请求的响应方式,可以分为两类四种

页面跳转

对于前端请求,通过转发或重定向的方式实现页面跳转,同时支持数据的回传

返回字符串

@RequestMapping("/say1")
public String say1() {
	System.out.println("喵");
	return "success";
}

此方式下会将返回字符串与视图解析器的前后缀进行拼接后跳转 

返回 ModelAndView 对象

(1)通过 new 运算符创建 ModelAndView 对象,并填充数据返回

@RequestMapping("/say2")
public ModelAndView say2() {
	ModelAndView modelAndView = new ModelAndView();
	modelAndView.addObject("userName", "猫头夜鹰");
	modelAndView.setViewName("success");
	return modelAndView;
}

在前端页面 success.jsp 中可以通过 EL 表达式获取数据

<h1>${userName}</h1>

(2)通过 MVC 框架对 ModelAndView 参数进行注入

@RequestMapping("/say3")
public ModelAndView say3(ModelAndView modelAndView) {
	modelAndView.addObject("userName", "猫头夜鹰");
	modelAndView.setViewName("success");
	return modelAndView;
}

MVC 框架会自动对 ModelAndView 参数进行注入,从而在方法中可以直接使用

(3)通过 MVC 框架对 Model 参数进行注入

@RequestMapping("/say4")
public String say4(Model model) {
	model.addAttribute("userName", "猫头夜鹰");
	return "success";
}

与上例类似,Model 对象中封装数据,而返回为字符串表示具体的 View

(4)通过 MVC 框架对 HttpServletRequest 参数进行注入

@RequestMapping("/say5")
public String say5(HttpServletRequest request) {
	request.setAttribute("userName", "猫头夜鹰");
	return "success";
}

这里的 request 就相当于原生 servlet 中收到的请求对象,其中含有相应的请求信息,这种方式不常用,尽可能地使用框架提供的对象

回写数据

返回字符串

(1)通过 MVC 框架对 HttpServletResponse 参数进行注入

@RequestMapping("/say6")
public void say6(HttpServletResponse response) throws IOException {
	response.setCharacterEncoding("unicode");
	response.getWriter().print("猫头夜鹰");
}

在方法中通过 response.getWriter().print() 进行返回,但不常用,尽可能地使用框架提供的对象

(2)通过 @ResponseBody 注解进行返回数据标识

@RequestMapping("/say7")
@ResponseBody
public String say7() {
	return "猫头夜鹰";
}

@ResponseBody 注解告知 MVC 框架此时方法为返回数据,而非进行页面跳转

返回对象或集合

(1)通过 jackson 工具进行 json 格式字符串的包装

导入相关依赖

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.13.0</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.0</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.13.0</version>
</dependency>

将需要返回的对象通过 ObjectMapper 对象的 writeValueAsString() 方法转换为 json 格式字符串 

@RequestMapping("/say8")
@ResponseBody
public String say8() throws JsonProcessingException {
	User user = new User();
	user.setUserName("猫头夜鹰");
	user.setAge(3);
	ObjectMapper objectMapper = new ObjectMapper();
	return objectMapper.writeValueAsString(user);
}

(2)配置消息转换器直接返回自定义对象

所需依赖同上

在 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>

直接返回自定义对象即可

@RequestMapping("/say9")
@ResponseBody
public User say9() {
	User user = new User();
	user.setUserName("猫头夜鹰");
	user.setAge(3);
	return user;
}

(3)通过 MVC 框架提供的注解驱动替代上述配置

在 spring-mvc.xml 中加入命名空间

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

在 xsi:schemaLocation 后加入

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

 注解驱动如下

<mvc:annotation-driven/>

通过注解驱动,底层自动进行 jackson 的集成,此时无需进行消息转换器的配置即可直接返回自定义对象

猜你喜欢

转载自blog.csdn.net/qq_25274377/article/details/121533275