@Builder 引起的 417 错误码

背景

公司目前有3个服务,可以简单的理解成"微服务",两个服务之间的通信是通过HttpURLConnection进行的,看到的第一眼,真的"生理不适"。

今天在实现两个服务通信的时候,报了一个417错误码。

问题

控制台输出:

查看下图的详细问题原因,得知是因为构造函数出了问题。

很明显,根本原因是:缺少无参构造器

解决

本来之前都是好好调用的,但是自从我在请求实体上新增了一个@Builder注解,就出问题了。 后面了解到@Builder注解只会引入一个全参构造方法。继续在其上引入@AllArgsConstructor@NoArgsConstructor两个注解,就把这个问题解决了。

因为只有@Builder@NoArgsConstructor这两个注解引入会有冲突,所以需要同时引入@AllArgsConstructor注解用来避免冲突。

@Builder了解

@Builder@NoArgsConstructor@AllArgsConstructor 是 Lombok 库提供的注解,它们用于简化 Java 类的编写,减少冗余的 getter、setter、构造器等方法的编写。这些注解之间的关系和潜在的冲突可以如下解释:

  1. @Builder

    • @Builder 注解用于生成构建器模式的代码,允许你以一种链式调用的方式来创建对象并设置其属性。
    • 当你使用 @Builder 注解时,Lombok 会自动生成一个带有所有字段的静态内部类(通常是 YourClassNameBuilder),这个内部类包含用于设置字段的方法,以及一个 build() 方法用于创建最终的 YourClassName 对象。
    • @Builder 默认会生成一个全参构造器 (即包含所有字段的构造器),但如果已经通过 @RequiredArgsConstructor@AllArgsConstructor 或其他方式显式定义了构造器,Lombok 通常会避免重复生成。
  2. @NoArgsConstructor

    • @NoArgsConstructor 注解用于生成一个无参构造器。
    • 这个注解在需要创建类的实例但不需要初始化任何字段时很有用,比如在使用 ORM 框架(如 Hibernate)时。
  3. @AllArgsConstructor

    • @AllArgsConstructor 注解用于生成一个全参构造器,即包含类中所有字段的构造器。
    • 这个注解在你希望在创建对象时立即初始化所有字段时很有用。

冲突关系

  • 当在同一个类上同时使用 @Builder@AllArgsConstructor 时,通常不会有直接的冲突,因为 @Builder 默认会生成一个全参构造器(除非已显式定义)。但是,如果你希望控制构造器的访问级别(例如,使构造器为 private),那么可能会有冲突。在这种情况下,你应该明确指定构造器的访问级别或使用 @RequiredArgsConstructor 代替 @AllArgsConstructor,因为 @Builder 可以与 @RequiredArgsConstructor 一起使用,以生成仅包含非空字段的构造器。
  • @Builder@NoArgsConstructor 可能会发生冲突,主要是因为它们各自生成不同类型的构造器,而这些构造器在某些情况下可能无法共存。如果你确实需要无参构造器,并且不介意手动设置对象的属性,那么可以使用 @AllArgsConstructor 代替 @Builder
  • 需要注意的是,过度使用这些注解可能会使代码难以阅读和维护,因此建议谨慎使用,并确保它们确实简化了你的代码而不是增加了复杂性。

总结

  1. 由于请求实体类缺少无参构造器造成了这次请求返回417错误码。
  2. 由于要使用@Builder注解,所以需要同时引入@NoArgsConstructor@AllArgsConstructor这两个注解来结合解决没有无参构造器的问题。
相关推荐
希望永不加班10 分钟前
SpringBoot 配置 HTTPS(自签名证书+正式证书)
java·spring boot·后端·spring·https
小马爱打代码25 分钟前
Spring Boot内嵌容器深度解析:Tomcat是如何被启动的?
spring boot·后端·tomcat
小江的记录本28 分钟前
【反射】Java反射 全方位知识体系(附 应用场景 + 《八股文常考面试题》)
java·开发语言·前端·后端·python·spring·面试
孟陬28 分钟前
国外技术周刊 #4:这38条阅读法则改变了我的人生、男人似乎只追求四件事……
前端·人工智能·后端
没有bug.的程序员35 分钟前
100%采样率引发的全线熔断:Spring Boot 链路追踪的性能绞杀与物理级调优
java·spring boot·后端·生产·熔断·调优·链路追踪
无籽西瓜a39 分钟前
Linux 文件权限与 chmod 详解
linux·服务器·后端
thulium_1 小时前
Rust 编译错误:link.exe 未找到
开发语言·后端·rust
SimonKing1 小时前
IntelliJ IDEA 配置与插件全部迁移到其他盘,彻底释放C盘空间
java·后端·程序员
华科易迅1 小时前
Spring 代理
java·后端·spring
IT_陈寒1 小时前
SpringBoot 项目启动慢?5 个提速技巧让你的应用快如闪电 ⚡️
前端·人工智能·后端