前言
在很久以前,写过一篇关于Web开发中的 Model、ModelMap和ModelAndView的使用详解,当时也是本着一个记录的心情去写的,所以尽量通俗,没想到,截止到目前,仍然有很多小伙伴在阅读和学习这篇文章,这让笔者想到,不管是现在科技怎么发达,依然会有很多初学者,于是,就出了这篇扫盲文。
在SpringBoot中,并不能直接响应客户端的请求结果,通常的做法是依赖SpringMVC框架返回结果,所以本文介绍的是SpringBoot下常见的四种返回类型,实际上也是SpringMVC的返回值类型。
目前SpringBoot框架的风头已经超过了当初的SSM框架,很多小伙伴甚至已经跳过了对SSM的学习,笔者还是建议去学习一下SSM,毕竟会SSM的人一定会SpringBoot,学习还是从基础来的好。
web项目常见返回信息的方式
不管是在jsp+servlet,SSH还是SSM,还是现在的SpringBoot、SpringCloud、SpringCloud Alibaba项目中,你可能会在各种Controller层中,看到如下的这些写法。
第一类:Void
如果一个控制层的方法,返回值标注为void类型,会出现以下几种情况:
1.无return的情况
如果方法内没有写return,那么SpringMVC默认把delete(映射的URL)
,当成视图名称(页面名)来解析,如果存在该视图,就返回给客户端;如果不存在该视图,就会报视图找不到异常(找不到前端VIew路径)。
@GetMapping("/delete")
public void deleteUser(String userId) {
//删除操作
}
报错:
org.thymeleaf.exceptions.TemplateInputException: Error resolving template [user/delete], template might not exist or might not be accessible by any of the configured Template Resolvers
图示
解放办法:
通过加 @ResponseBody 来修改默认行为,该注解表示返回JSON数据,这里返回空JSON数据,而不是把URL当成视图名称来解析。
@GetMapping("/delete")
@ResponseBody
public void deleteUser(String userId) {
//删除操作
}
就不会在报异常。
因为在控制器类上加@RestController注解或者其方法上加入@ResponseBody注解后,默认会使用jackson插件来返回json数据。
2.重定向的情况
代码中采用Response来重定向请求。