如何从 quarkus 本机构建的应用程序返回空值?

问题描述 投票:0回答:1

我有一个 PostgreSQL 数据库,其中的列可以包含空值。如果我使用 quarkus dev 模式或 jvm,查询将返回(正确)null 值。但是,如果我使用 GraalVM 使用本机配置文件进行构建,它将返回 0(表示 Integer)和 0.0(表示 Float)(而不是 null)。

我在多阶段 docker 构建期间使用 quarkus-resteasy-jsonb 扩展和以下图像: 来自 quay.io/quarkus/ubi-quarkus-mandrel-builder-image:22.3-java17 AS 构建 ...

已经测试过的内容:

可能与此相关:Quarkus 数字类型(整数、浮点数)返回 0 而不是 null

这是我的实体类的开头:

@Entity
@Table(name = DBUtils.MY_TABLE_NAME, schema = DBUtils.SCHEMA_NAME)
@Getter
@Setter
public class MyClass extends PanacheEntityBase {

private static Logger technicalLogger = Logger.getLogger(LoggerNames.TECHNICAL.getName());

@Id
@GeneratedValue(generator = "myclassSequenceGenerator")
@SequenceGenerator(name = "myclassSequenceGenerator", sequenceName  = "myclass_id_seq", allocationSize = 1)

@Column(name = "myclass_id", nullable = false)
public int myclassId;

@Column(name = "myclass_name", length = 50)
public String myclassName;

@Column(name = "street_length_m", length = 5)
public Integer lengthInMeters;  // <= gives 0 if null in DB

@Column(name = "street_length_km", length = 5)
public Float lengthInKilometers; // <= gives 0.0 if null in DB 
...

任何帮助将不胜感激。非常感谢!

postgresql quarkus jsonb resteasy graalvm
1个回答
0
投票

使用相同的配置,Jackson 而不是 Jsonb,使用 GraalVM 和 Java21,不会发生此错误。

如果您使用Active Record策略,则不需要Lombok。

有一个问题已打开 https://github.com/oracle/graal/issues/5672

我会尝试:

  • 升级到Quarkus最新版本
  • 使用 Java 21 升级到 GraalVM
  • 删除 Lombok,因为属性是公共的 如果仍然失败
  • 我会尝试为 Jackson 更改 Jsonb。
  • 确保您拥有反应式休息客户端和反应式休息客户端序列化库(jackson 和 jsonb)
© www.soinside.com 2019 - 2024. All rights reserved.