Quarkus 和 Jackson 的奇怪 Lombok 行为
Strange Lombok behaviour with Quarkus and Jackson
目前我遇到了一个奇怪的问题。我在我的 Quarkus 项目中使用 lombok 来自动生成 getter、setter 等。当我将 Quarkus 编译为原生图像时,Jackson 拒绝序列化 Lombok-Data-Object,但序列化另一个没有问题。
更奇怪的是,这个错误只发生在我编译本地二进制文件并将其嵌入到容器中时。 运行 "quarkus:dev" 配置文件中的两个示例都完美无缺。
来自此 class 的对象被序列化:
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "accounts")
public class AccountEntity {
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
@Column(name = "id", updatable = false, nullable = false)
private UUID id;
@Column(unique = true, name = "username", nullable = false)
private String username;
@Column(unique = true, name = "mail", nullable = false)
private String mail;
@Column(name = "password", nullable = false)
private String password;
}
来自此 class 的对象未得到:
@Getter
@AllArgsConstructor
public class LoginResponse {
private final String token;
}
错误信息:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class de.alexzimmer.pwa.model.LoginResponse and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
但即使我查看生成的 class 文件,我也可以看到 public getter 两个 classes 都已生成。我非常感谢您对这一切如何发生的任何建议和想法。
谢谢!
您必须通过添加 @RegisterForReflection
注释来注册此 class 以进行反射。
它适用于第一个对象,因为它是一个实体,这是自动完成的。
有关完整说明,请参阅 https://quarkus.io/guides/writing-native-applications-tips#registering-for-reflection。
我可能会在此处添加 Jackson 错误消息,以便更容易找到它。
目前我遇到了一个奇怪的问题。我在我的 Quarkus 项目中使用 lombok 来自动生成 getter、setter 等。当我将 Quarkus 编译为原生图像时,Jackson 拒绝序列化 Lombok-Data-Object,但序列化另一个没有问题。
更奇怪的是,这个错误只发生在我编译本地二进制文件并将其嵌入到容器中时。 运行 "quarkus:dev" 配置文件中的两个示例都完美无缺。
来自此 class 的对象被序列化:
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "accounts")
public class AccountEntity {
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
@Column(name = "id", updatable = false, nullable = false)
private UUID id;
@Column(unique = true, name = "username", nullable = false)
private String username;
@Column(unique = true, name = "mail", nullable = false)
private String mail;
@Column(name = "password", nullable = false)
private String password;
}
来自此 class 的对象未得到:
@Getter
@AllArgsConstructor
public class LoginResponse {
private final String token;
}
错误信息:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class de.alexzimmer.pwa.model.LoginResponse and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
但即使我查看生成的 class 文件,我也可以看到 public getter 两个 classes 都已生成。我非常感谢您对这一切如何发生的任何建议和想法。
谢谢!
您必须通过添加 @RegisterForReflection
注释来注册此 class 以进行反射。
它适用于第一个对象,因为它是一个实体,这是自动完成的。
有关完整说明,请参阅 https://quarkus.io/guides/writing-native-applications-tips#registering-for-reflection。
我可能会在此处添加 Jackson 错误消息,以便更容易找到它。