SpringMVC响应数据
返回值分类
字符串、void、转发和重定向、@ResponseBody响应json数据
字符串
controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
Controller:
package com.qzcsbj.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ReturnController { @RequestMapping("/testReturnString") public String testReturnString() { System.out.println("执行testReturnString方法。"); return "success"; } }
直接访问:http://localhost:8080/testReturnString
void
Servlet原始API可以作为控制器中方法的参数:
1、使用request转向页面
package com.qzcsbj.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Controller public class ReturnController { @RequestMapping("/testReturnVoid") public void testReturnVoid(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("返回值是void"); request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request,response); } }
2、通过response页面重定向
package com.qzcsbj.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Controller public class ReturnController { @RequestMapping("/testReturnString") public String testReturnString() { System.out.println("执行testReturnString方法。"); return "success"; } @RequestMapping("/testReturnVoid") public void testReturnVoid(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("返回值是void"); // request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request,response); // response.sendRedirect("/WEB-INF/jsp/success.jsp"); // 访问会报错 response.sendRedirect("testReturnString"); } }
3、通过response指定响应结果,例如响应json数据:
package com.qzcsbj.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Controller public class ReturnController { @RequestMapping("/testReturnVoid") public void testReturnVoid(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("返回值是void"); response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); response.getWriter().write("{\"code\":\"00\",\"msg\":\"成功\"}"); } }
直接访问:http://localhost:8080/testReturnVoid
转发和重定向
forward转发(最后url不会变)
controller方法在提供了String类型的返回值之后,默认就是请求转发。
也就是说,return "success";可以写成:
return "forward:/WEB-INF/jsp/success.jsp";
需要注意的是,如果用了formward:则路径必须写成实际视图url,不能写逻辑视图。
不能写成:
return "forward:success.jsp";
也不能写成:
return "forward:success";
否则都会报404
Redirect重定向(最后url会变)
contrller方法提供了一个String类型返回值之后,它需要在返回值里使用:redirect:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head> <title>Title</title> </head> <body> <h1>Hello, SpringMVC</h1> <h1>${requestScope.username}</h1> </body> </html>
控制器
package com.qzcsbj.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Controller public class ReturnController { @RequestMapping("/testReturnModelAndView") public ModelAndView testReturnModelAndView() { ModelAndView mv = new ModelAndView(); mv.addObject("username", "jack"); mv.setViewName("success"); return mv; } @RequestMapping("/testRedirect") public String testRedirect() { System.out.println("执行testRedirect方法。"); return "redirect:testReturnModelAndView"; } }
注意,下面url变了
请求的是:http://localhost:8080/testRedirect
@ResponseBody响应json数据
作用:该注解用于将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json、xml等
Springmvc默认用MappingJacksonHttpMessageConverter对json数据进行转换,需要加入jackson的包。
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.3</version> </dependency>
实体类
package com.qzcsbj.pojo; import java.io.Serializable; public class Account implements Serializable { private static final long serialVersionUID = -7258686420068923807L; private Integer id; private String name; private Float money; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Float getMoney() { return money; } public void setMoney(Float money) { this.money = money; } @Override public String toString() { return "Account{" + "id=" + id + ", name='" + name + '\'' + ", money=" + money + '}'; } }
控制器中的代码:
package com.qzcsbj.controller; import com.qzcsbj.pojo.Account; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.ArrayList; import java.util.List; @Controller public class ReturnJsonController { @RequestMapping("/testResponseJson") @ResponseBody public Account testResponseJson(@RequestBody Account account){ // 通过@requestbody把json字符串封装到account对象中 return account; } }
启动tomcat,通过jmeter发送请求
原文会持续更新,原文地址:https://www.cnblogs.com/uncleyong/p/17053559.html
__EOF__
本文作者:持之以恒(韧)
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!