SpringBoot 异常处理机制详解
SpringBoot 异常处理机制详解异常处理自动配置类 ErrorMvcAutoConfigurationSpringBoot 异常处理的自动配置类是 ErrorMvcAutoConfiguration,本节将说明该自动配置类中配置了哪些重要组件,以及这些组件有什么作用。
概览在深入介绍 ErrorMvcAutoConfiguration 所注册的组件前,这里先做一个概览,主要介绍其中一些重要的组件。
BasicErrorController 错误处理控制器:
默认对 /error 错误请求进行处理并响应。
SpringBoot 各式各样的异常处理,最后都是发送 /error 请求,从而通过 BasicErrorController 中的两个处理器来响应错误页面或者响应错误数据。除非你自定义了 ErrorController 类并注册到容器中。
DefaultErrorAttributes 默认错误属性:
主要功能是规定了错误处理最后对外响应,应该响应哪些信息,比如规定了,要响应时间戳,状态码,错误信息,错误堆栈等,无论是响应错误页面还是响应错误数据。
Defaul ...
HttpMessageConverter 自动配置过程分析
HttpMessageConverter 自动配置过程分析第一步:所有 WebMvcConfigurer 实现类注册到 Spring 容器中一般来说,容器中至少会会注册 WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter 这个实现类。
如果有 SpringMVC 定制化的需求,那么我们自己实现的 WebMvcConfigurer 也会注册到容器中,从而 Spring 容器中包含多个 WebMvcConfigurer 实现类。
第二步:WebMvcAutoConfiguration$EnableWebMvcConfiguration 自动装配其父类 DelegatingWebMvcConfiguration 属性 configurersDelegatingWebMvcConfiguration 的 configurers 属性是 WebMvcConfigurerComposite 类型,该属性被配置为自动装配:
123456789101112131415@Configuration(proxyBeanMethods = false ...
自定义类型参数的数据绑定源码分析
自定义类型参数的数据绑定源码分析
关于自定义类型参数的参数解析场景,SpringMVC处理请求源码分析 —— part2 场景分析 > 2. 表单提交 > 2.1 源码分析 已经讲得非常清晰了,下面主要是对该博客中的内容做一些补充。
前端页面表单:
12345678<form action="/saveuser" method="post"> 姓名:<input name="userName" value="zhangsan"/> <br/> 年龄:<input name="age" value="18"/> <br/> 生日:<input name="birth" value="2019/12/10"/> <br/> 宠物姓名:<input name="pet.name" valu ...
PathVariable 的参数解析场景
@PathVariable 的参数解析场景
本文对 @PathVariable 的参数解析场景进行了详细的源码分析,希望通过该具体场景,帮助理解以下内容:
SpringMVC 请求处理的参数解析的大致流程
请求映射 RequestMappingHandlerMapping 的工作原理
处理器适配器 RequestMappingHandlerAdapter 的工作原理
数据绑定器 WebDataBinder 中的转换服务 ConversionService 的工作原理
本文参考:SpringMVC处理请求源码分析 —— part2 场景分析 > 1. @PathVariable
浏览器请求是:GET /car/3/owner/lisi
Controller 处理器定义是:
123456@ResponseBody@GetMapping("/car/{id}/owner/{username}")public Map<String, Object> getCar(@PathVariable("id&q ...
好文收录 - SpringMVC 处理请求源码分析 —— part1 整体流程
好文收录 - SpringMVC 处理请求源码分析 —— part1 整体流程
原文链接:http://www.coderzoe.com/archives/28/
本文主要讲SpringMVC处理HTTP请求的流程,本篇笔记的部分内容源自尚硅谷的雷丰阳老师。但笔者在学习过程中发现雷丰阳老师源码虽然讲的非常棒,但缺少对整体架构或者概览的把握,这点导致很多同学在学习时过于深入细节,最后一头雾水。因此笔者写下本篇笔记,想从简到繁,比较清晰的捋一下SpringMVC处理请求的大体源码过程。
本文力求深入浅出,尽量少的大幅贴源码,先从大概流程再到具体细节这样的过程来讲解。
笔记将会分为三部分:整体流程源码分析、具体场景源码分析和额外补充功能分析。
本篇笔记是第一部分,整体流程的源码分析,想先让大家对SpringMVC执行的整体流程有个概念。
本篇笔记适合有一定SpringMVC基础的同学,至少知道常用注解如@ResponseBody,@RequestBody的功能,以及ModelAndView,Model,Map等类的作用。
本篇笔记的SpringBoot版本是2.7.2。
@author co ...
SpringBoot 的自动配置原理
SpringBoot 的自动配置原理课程在讲解 SpringBoot 的自动配置原理时,@ComponentScan 中默认的两个过滤器没有深入讲解,@AutoConfigurationPackage 的作用讲解得有问题,因此这里做一个扩展和订正。
@ComponentScan 中的两个过滤器有什么用?@SpringBootApplication 注解是 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan 三个注解的组合/合成注解,如下:
123456789@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExclu ...
Configuration 的 proxyBeanMethods 属性与 Bean 方法
@Configuration 的 proxyBeanMethods 属性与 @Bean 方法@Configuration 注解所标注的配置类中,我们常常使用 @Bean 标注来方法向 IoC 容器中注册组件。
@Configuration 的 proxyBeanMethods 属性用来控制是否对 @Bean 方法进行代理。
如果 proxyBeanMethods = true,那么 Spring 会将 @Configuration 所标注的配置类作为目标类来生成相应的代理类,最后将代理类注册到容器中。
类中的 @Bean 方法均被加上一层代理,此时向 IoC 容器中注册组件的具体逻辑,是在 @Bean 方法的代理的后置增强中完成。
无论是 Spring 为了注册组件去调用 @Bean 方法,还是用户代码中去主动调用 @Bean 方法,所调用的都是代理方法,需要经过增强代码处理。
前置增强:尝试从 IoC 容器中获取类型为 @Bean 方法返回值类型的对象,如果能够获取到,则直接返回 IoC 容器中的相应对象,如果获取不到执行目标方法。
目标方法:就是我们自己编写的 @Bean 方 ...
SSM 整合 - Spring 与 MyBatis 的整合细节
SSM 整合 - Spring 与 MyBatis 的整合细节先列出 Spring 与 Mybatis 整合后,Spring 的配置文件内容:
1234567891011121314151617181920212223242526272829303132333435363738394041424344<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" ...
HttpMessageConverter - 响应中文内容乱码问题
HttpMessageConverter - 响应中文内容乱码问题在讲解 @ResponseBody 注解时,我们测试了四种响应数据到浏览器的情况:
超链接发起请求,服务器通过 Servlet API 的 response 对象响应字符串到浏览器
超链接发起请求,服务器使用 @ResponseBody 响应字符串到浏览器
超链接发起请求,服务器使用 @ResponseBody 响应一个 Java 对象到浏览器
Axios 发起 Ajax 请求,服务器使用 @ResponseBody 响应字符串到浏览器
当响应数据中包含中文内容时,前两种会出现中文内容乱码现象!
为什么 CharacterEncodingFilter 没有作用?还记得,在 web.xml 中曾经配置了一个 CharacterEncodingFilter,如下:
12345678910111213141516<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org ...
HttpMessageConverter - @RequestBody 和 @ResponseBody 是如何简化开发的
HttpMessageConverter - @RequestBody 和 @ResponseBody 是如何简化开发的使用 SpringMVC 提供 @RequestBody 和 @ResponseBody 注解可以简化开发。
@RequestBody 简化了哪些流程Html 标签
123<div id="app"> <button @click="jsonRequestBody">发送 JSON 请求体</button></div>
Vue + axios 代码:12345678910111213141516171819new Vue({ el: "#app", methods: { jsonRequestBody: function () { axios({ "method": "post", ...