SpringBoot中HTTP Status Code、ModelAndView的使用
1 HTTP Status Code
HTTP请求响应的内容有很多,包括Body、Cookies、Headers和Status。 我们最常用的是Body、其次Headers、Cookies。而HTTP Status Code关注得最少。
1.1 HTTP Status Code
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
1.2 HttpStatus状态码详解
HttpStatus = { //Informational 1xx 信息 '100' : 'Continue', //继续 '101' : 'Switching Protocols', //交换协议 //Successful 2xx 成功 '200' : 'OK', //OK '201' : 'Created', //创建 '202' : 'Accepted', //已接受 '203' : 'Non-Authoritative Information', //非权威信息 '204' : 'No Content', //没有内容 '205' : 'Reset Content', //重置内容 '206' : 'Partial Content', //部分内容 //Redirection 3xx 重定向 '300' : 'Multiple Choices', //多种选择 '301' : 'Moved Permanently', //永久移动 '302' : 'Found', //找到 '303' : 'See Other', //参见其他 '304' : 'Not Modified', //未修改 '305' : 'Use Proxy', //使用代理 '306' : 'Unused', //未使用 '307' : 'Temporary Redirect', //暂时重定向 //Client Error 4xx 客户端错误 '400' : 'Bad Request', //错误的请求 '401' : 'Unauthorized', //未经授权 '402' : 'Payment Required', //付费请求 '403' : 'Forbidden', //禁止 '404' : 'Not Found', //没有找到 '405' : 'Method Not Allowed', //方法不允许 '406' : 'Not Acceptable', //不可接受 '407' : 'Proxy Authentication Required', //需要代理身份验证 '408' : 'Request Timeout', //请求超时 '409' : 'Conflict', //指令冲突 '410' : 'Gone', //文档永久地离开了指定的位置 '411' : 'Length Required', //需要Content-Length头请求 '412' : 'Precondition Failed', //前提条件失败 '413' : 'Request Entity Too Large', //请求实体太大 '414' : 'Request-URI Too Long', //请求URI太长 '415' : 'Unsupported Media Type', //不支持的媒体类型 '416' : 'Requested Range Not Satisfiable', //请求的范围不可满足 '417' : 'Expectation Failed', //期望失败 //Server Error 5xx 服务器错误 '500' : 'Internal Server Error', //内部服务器错误 '501' : 'Not Implemented', //未实现 '502' : 'Bad Gateway', //错误的网关 '503' : 'Service Unavailable', //服务不可用 '504' : 'Gateway Timeout', //网关超时 '505' : 'HTTP Version Not Supported' //HTTP版本不支持 };
使用样例:
if (HttpStatus.BAD_REQUEST == status) { return new ModelAndView("error/error_400"); } else if (HttpStatus.NOT_FOUND == status) { return new ModelAndView("error/error_404"); }
2 ModelAndView
使用ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图。
从名字上看ModelAndView中的Model代表模型,View代表视图,这个名字就很好地解释了该类的作用。业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring MVC框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。
构造ModelAndView对象当控制器处理完请求时,通常会将包含视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherServlet。因此,经常需要在控制器中构造ModelAndView对象。
ModelAndView类提供了几个重载的构造器和一些方便的方法,让你可以根据自己的喜好来构造ModelAndView对象。这些构造器和方法以类似的方式支持视图名称和视图对象。通过ModelAndView构造方法可以指定返回的页面名称,也可以通过setViewName()方法跳转到指定的页面 , 使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。
2.1 ModelAndView 作用
1.返回到指定的页面
ModelAndView构造方法可以指定返回的页面名称
return new ModelAndView("redirect:/m07.jsp");
通过setViewName()方法跳转到指定的页面
mav.setViewName("hello");
2.返回参数到指定页面的request作用域中
使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字,参数会返回到新页面的request作用域中
2.2 ModelAndView 的3种用法
1.ModelAndView的第一种用法,先创建ModelAndView对象,再通过它的方法去设置数据与转发的视图名
setViewName(String viewName)//设置此 ModelAndView 的视图名称, 由 DispatcherServlet 通过 ViewResolver 解析
addObject(String attributeName, Object attributeValue)//通过key/value的方式绑定数据
例子:
/** * 利用ModelAndView来转发数据,给前端视图 * @return */ @RequestMapping("/m06") public ModelAndView m06() { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("m06"); modelAndView.addObject("message", "Hello World, Hello Kitty"); return modelAndView; }
2.ModelAndView的第二种方法,可以直接通过带有参数的构造方法 ModelAndView(String viewName, String attributeName, Object attributeValue) 来返回数据与转发的视图名
/** * 利用ModelAndView来转发数据,给前端视图 * @return */ @RequestMapping("/m07") public ModelAndView m07() { return new ModelAndView("m07", "message", "Hello World"); }
3.ModelAndView的第三种用法,设置重定向
/** * ModelAndView默认转发 * ModelAndView还是可以设置重定向 * 1. 重定向另一个控制器 * 2. 重定向具体的jsp页面 * @param name * @return */ @RequestMapping("/{name}/m07") public ModelAndView m07(@PathVariable String name) { if (!"admin".equals(name)) { return new ModelAndView("redirect:/m07.jsp"); } return new ModelAndView("m07"); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了