目前,我面临一个奇怪的问题。我在Quarkus项目中使用lombok来自动生成getter,setter等。当我将Quarkus编译为本地映像时,Jackson拒绝序列化Lombok-Data-Object,但是序列化了另一个而没有问题。

甚至更奇怪的是,仅当我编译本机二进制文件并将其嵌入到容器中时才会发生此错误。在“ quarkus:dev”配置文件中运行两个示例都可以正常工作。

此类的对象被序列化:

@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;

}


此类的对象不会:

@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)


但是,即使我查看生成的类文件,也可以看到两个类的公共获取器都已生成。感谢您提供有关此情况的任何建议和想法。

谢谢!

最佳答案

您必须通过添加@RegisterForReflection批注来注册此类以进行反射。

它是第一个对象,因为它是一个实体,并且会自动完成。

有关完整说明,请参见https://quarkus.io/guides/writing-native-applications-tips#registering-for-reflection

我可能会在此处添加Jackson错误消息,以便可以更轻松地找到它。

07-24 09:50
查看更多