Spring和SpringMVC
文章平均质量分 52
Spring、SpringMVC、WebMVC相关文章
拄杖忙学轻声码
希望学习的同时也能和大家交流分享技术
展开
-
SpringBoot 3.x 集成 knife4j (Swagger3)
SpringBoot 3.x 开始将 javax 包改成了 jakarta ,而原swagger等包中依然使用的是javax,所以会报错,并且不支持OpenAPI 3标准,升级SpringBoot 3.x以后会有很多问题。4、此时启动项目,就已经可以使用knife4j了。访问地址:http://localhost:8080/doc.html。SpringBoot:3.x目前只支持 OpenAPI 3规范。3、配置注解,与以往的Swagger注解用法有所不同。1、导入依赖 knife4j。原创 2024-10-29 14:30:00 · 68 阅读 · 0 评论 -
SpringRetry实现接口异常优雅重试机制
【4】backoff:重试策略,delay = 1000, multiplier = 2 延迟1秒(1000毫秒)进行第一次重试,后续每次延迟时间会以 multiplier 的倍数进行重试,示例为:1(1000毫秒)秒、2(1000*2)秒、4(2000*2)秒、8(4000*2)秒...以此类推进行重试。【4】如果一个实现类中有多个异常回调方法,在 @Retryable 中可以使用 recover 属性指定回调的方法名。从结果可以看出,符合重试策略的预期,重试5次后依然异常失败,进入失败回调方法结束。原创 2023-04-06 01:59:43 · 665 阅读 · 0 评论 -
Java Restful API接口获取请求头、请求体、以及设置响应状态码、应答(响应)体等
【1】一般我们会为 @PostMapping、@PutMapping、@PatchMapping 请求方式设置请求体,@GetMapping、@DeleteMapping 通过路径传参,不设置请求体(也可以设置请求体)1、从 request 对象中,使用缓冲流读取器、stream流等方式获取请求体。3、通过 response 对象可以通过输出流对象,以字节的方式写入响应体。1、使用缓冲读取器读取 request 的输入流对象,可以获得请求体。2、把响应体写入输出流之后,需要冲刷、关闭输出流对象。原创 2023-03-20 23:17:49 · 4623 阅读 · 0 评论 -
Spring或SpringBoot中的@ConditionalOnProperty、@ConditionalOnMissingBean、@ConditionalOnExpression及SPI作用
Spring容器加载注册JavaBen的时候,如果在同一个 @Configuration或@Component 标注的配置类中配置多个BeanId相同的实例,那么Spring容器默认只加载第一个同名的实例,在实际应用中需要注意这一点。【1】我们可以将需要条件限制的类当做自动装配类,这样在注册Bean阶段可以保证在我们限制的类注册进容器之前、让被限制的实例先完成注册入容器中,1、因为在实际的应用过程中,我们使用第三方插件,他们的默认配置都会存在于插件的jar包中,而我们的自定义的配置类则在于自身的应用中。原创 2022-11-14 14:09:34 · 1575 阅读 · 0 评论 -
Spring Bean的生命周期理解
如果这个Bean实现了 ApplicationContextAware 接口,会调用它实现的setApplicationContext(ApplicationContext)方法,传递的是Spring的应用程序上下文对象。如果这个Bean已经实现了 BeanNameAware 接口,就会调用它实现的setBeanName(String)方法,此处传递的是Spring配置文件中Bean的id值。如果这个bean在Spring配置文件中配置了 destory-method 属性,会调用其配置的销毁方法。原创 2022-12-01 13:41:49 · 439 阅读 · 0 评论 -
SpringBoot利用Spring SPI机制实现自动按顺序加载注册JavaBean到容器中,以及@ImportAutoConfiguration的使用
1、SPI机制(Service Provider Interface),服务提供接口,主要是用来解耦,资源文件目录下的 \resources\META-INF\spring.factories 我们把它归纳为Spring为我们提供的SPI机制,通过这种机制,我们可以在不修改Spring源码的前提下,非常轻松地做到对Spring框架的扩展开发。2、我们都知道,SpringBoot只能扫描本体项目中的主启动类同级包下的所有组件类、及 spring.facotries 中的组件类,而扫描。原创 2022-11-28 14:29:28 · 1317 阅读 · 0 评论 -
Spring中的 @Qualifier 指定 @Bean、@Component、@Configuration 注册的JavaBean入参使用场景
【2】但是被传入的JavaBean有可能会存在多个,所以需要使用 @Qualifier 指定传入哪个Bean,如果不指定哪个默认会取优先级更高的实例,优先级先后顺序为:@Primary标注的实例 > @Configuration或@Component注册的实例 > @Bean注册的实例。@Primary:主要的,顾名思义就是如果容器中同一个类型出现多个实例,那么按类型注入就会默认取@Primary标注的实例,@Primary标注的实例优先级更高。原创 2022-11-17 11:23:08 · 2070 阅读 · 0 评论 -
Spring对MySQL的事务传播机制说明、以及声明式事务控制的优先级理解
2、如果主方法上没有标记 @TransactionDefinition 注解,那么会以内部调用方法上标记的 @TransactionDefinition 事务一致性为准,若内部调用多个方法,每个被调用的方法以自己的事务控制为准,不影响其他被调用方法的事务。3、解决方案一:嵌套调用,用自定义注解的方法调用标记事务注解的方法,这样在 aop 环切时执行完毕自定义注解的方法的同时、事务注解方法就已经在自定义注解方法中被调用了,环切方法 proceed() 后就可以获取到事务提交后的最新数据了。原创 2022-09-27 10:40:34 · 336 阅读 · 0 评论 -
Rest接口请求报错Cannot deserialize instance of `java.lang.String` out of START_OBJECT token
2、如果是入参是集合类型,入参值类型与入参要求的泛型类型不一致。1、入参值类型与入参要求的类型不一致。请求发送接口,报如下异常信息。原创 2022-09-06 16:24:01 · 2149 阅读 · 0 评论 -
Spring、SpringMVC和JDK常用注解、接口、方法说明
Service:作用同@Component,用于实例化注册Java Bean。@Autowired:用于Java Bean的注入,默认按type匹配,如果匹配不到再按name匹配,若是多个类实现该接口,则需要通过@Qualifier或者name属性值来做区分。@RestController:用于标记当前类是控制层,等效于@Controller + @ResponseBody的组合,最终响应到客户端的是json格式数据。@Repository:作用同@Component,用于实例化注册Java Bean。原创 2022-03-14 15:18:58 · 1063 阅读 · 1 评论 -
拦截器响应头中配置“Access-Control-Expose-Headers”实现跨域请求暴露token
2】关键代码 response.setHeader("Access-Control-Expose-Headers", "token");和前端同事联调接口中,前端同事反映说在跨域请求的情况下无法获取token的值,后来找到解决办法。1】在登录拦截器处理类中的响应对象,把token对象暴露出来即可。原创 2021-10-20 13:52:57 · 13984 阅读 · 1 评论 -
@DateTimeFormat用法、@JsonFormat格式化日期时间后比原来的时间少了八小时问题用法
DateTimeFormat:作用域为入参,针对路径传参方式生效,作用是入参日期格式化,前端传入日期格式字符串到后端,会自动转换为日期类型。@JsonFormat:作用域为出参、入参,针对 @RequestBody 请求体入参或出参都有效果,作用是把日期类型和日期字符串相互转换。原创 2021-08-26 10:42:08 · 2777 阅读 · 1 评论 -
SpringBoot项目解决@ResponseBody注解返回xml格式数据而不是json格式的问题
除了上述的 spring-cloud-starter-alibaba-sentinel 中内置了 jackson-dataformat-xml 包,还有如下包中也内置了此包,所以使用的时候需要注意排除。但我们希望响应数据格式是json格式,最后发现是因为某些依赖中整合了 jackson-dataformat-xml 依赖导致的,所以只需要把内置的这个依赖排除掉就解决了。原创 2021-08-27 02:51:20 · 5446 阅读 · 0 评论 -
HandlerInterceptor拦截器接口的preHandle、postHandle与afterCompletion调用时序说明
调用时间:Controller方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这个方法中你可以对ModelAndView进行操作。执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行。备注:postHandle虽然post打头,但post、get方法都能处理。执行顺序:链式Intercepter情况下,Intercepter。调用时间:DispatcherServlet进行视图的渲染之后。调用时间:Controller方法处理之前。原创 2021-07-29 15:11:13 · 1473 阅读 · 0 评论 -
捕捉@Validated校验非空注解@NotNull、@NotBlank等自定义的message返回给前端
【代码】捕捉@Validated校验非空注解@NotNull、@NotBlank等自定义的message返回给前端。原创 2021-07-09 15:50:29 · 3224 阅读 · 0 评论