gpt4 book ai didi

java - @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) 不适用于微服务上下文

转载 作者:行者123 更新时间:2023-11-30 05:31:09 26 4
gpt4 key购买 nike

当尝试将通用对象序列化/反序列化为特定类时,我遇到了以下问题:

代码:

// Generic holding the payload data linked to this event
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
@JsonSubTypes({
@JsonSubTypes.Type(value=Request.class),
@JsonSubTypes.Type(value=Decision.class)
})
private P payload;

不幸的是,这会解析为包含整个类路径的 @class 属性。例如:

com.***.***.request.entity.Request

由于我使用微服务,类路径略有不同。在接收端,应该是:

com.***.***.dossier.entity.Request

我不知道如何解决这个问题。我也尝试过 MINIMAL_PATH 和 CUSTOM。

也欢迎任何有关如何正确(反)序列化泛型的其他建议。

谢谢!

<小时/>

编辑:第二个建议

@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = As.PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = ResourceReference.class, name = "resourceReference"),
@JsonSubTypes.Type(value = Request.class, name = "request")
})
private P payload;

P 应该反序列化的示例:

@JsonTypeName("request")
public class Request {}

但是这给了我以下错误:

Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_OBJECT token

最佳答案

使用CLASS作为类型信息几乎从来都不是一个好主意,即使它是默认的;它会导致不必要的内部耦合并使迁移变得困难。请改用 NAME,并使用合理的 @JsonTypeName,例如 FooRequest

关于java - @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) 不适用于微服务上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57527499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com