SpringMVC返回数据
返回数据
我们接收到客户端发来的请求后,就后对请求进行业务处理,然后返回响应数据!
而我们SpringMVC默认是返回一个
html
静态页面,我们可以通过@ResponseBody
返回非静态页面!
返回静态页面
@Controller
@ResponseBody
@RequestMapping
public class TestMapping {
//@GetMapping("/index")
@RequestMapping(value = "/index",method = RequestMethod.GET)
public String getMapper(){
return "index.html";
}
}
返回text/html
我们加上
@ResponseBody
就可以返回一个非静态页面
@ResponseBody
@RequestMapping
public class TestMapping {
//@GetMapping("/index")
@RequestMapping(value = "/index",method = RequestMethod.GET)
public String getMapper(){
return "<h1>index</h1>";
}
}
返回JSON对象
@RestController //这个注解是@ResponseBody和@Controller组合!
public class GetJson {
@RequestMapping("/getJson")
public HashMap<String,Integer> getJson(){
HashMap<String,Integer> map = new HashMap<>();
map.put("刘备",18);
map.put("曹操",21);
map.put("诸葛亮",88);
return map;
}
}
我们通过Fiddler
抓包可以看到服务器返回的响应信息就是JSON
格式的数据!
可以看到我们
SpringMVC
模块内置了进行JSON
数据转换的依赖,不需要像Servlet项目一样通过引入Jackon
等依赖进行转换!
而且转换过程直接由Spring
完成,也不用通过自己手动进行转换!
请求转发或请求重定向
return 不止可以返回一个视图给前端,还能实现跳转
跳转方式有如下2种:
- forward : 请求转发
- redirect : 请求重定向
@Controller
@RequestMapping("/root")
public class Return {
@RequestMapping("/index1")
public String index1(){
//请求转发
return "forward:/index.html";
}
@RequestMapping("/index2")
public String index3(){
//请求重定向
return "redirect:/index.html";
}
}
forward
请求转发
可以看到请求转发,上面的
url
地址是不变的,而网页的内容是index.html
页面内容!
redirect
请求重定向
请求重定向
redirect
输入路由接口,直接就跳转到重定向的路由地址,url
也随着改变!
注意:
因为我们这里要返回一个静态页面给前端,而又用了
redirect
和forward
进行转发和重定向,就不能使用@ResponseBody
注解,不然会返回字符串!
forward和redirect区别
- 请求重定向(redirect),将请求重新定位到资源;请求转发(forward) 服务器转发!
- 请求重定向地址发生改变,请求转发地址不变
- 请求重定向与直接访问新地址效果一样,不存在原来的外部资源不能访问;请求转发服务器端转发有可能造成原外部资源不能访问!
这两个如何区分呢?
例如张三找你借钱,你没钱,你向李四借钱再借给张三,你就是请求转发!而你直接告诉张三没钱,让他去找李四借,就是请求重定向!所以请求转发张三找你借钱就好了所以地址不变,而请求重定向,让他找李四借所以地址也改变了
请求转发外部资源丢失问题
请求转发forward
如果需要的资源和访问的页面不在通一个页面下,会导致外部资源丢失!
通过redirect
请求重定向!!!
通过forward
请求转发
外部资源丢失!
@RequestBody说明
- @RequestBody返回的值如果是字符会转成text/html,如果返回的是对象会转成application/json返回给前端
- @RequestBody可以用来修饰类或者方法,修饰类表示类中所有的方法都会返回html或者json,而不是视图
@RestController
是@Controller
和@ResponseBody
组合注解
- 点赞
- 收藏
- 关注作者
评论(0)