@JsonTypeInfo
(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type"
)
@JsonSubTypes
({
@JsonSubTypes.Type(value = SomeProduct.class, name = Product.PRODUCT_TYPE_SOME)
})
public abstract class Product
{
static final String PRODUCT_TYPE_SOME = "some_product";
}
public class SomeProduct extends Product
{
@JsonProperty("status")
@JsonSerialize(include = JsonSerialize.Inclusion.NON_DEFAULT)
private int status;
public int getStatus()
{
return status;
}
public void setStatus(int status)
{
this.status = status;
}
}
将有更多的类(不同的产品)扩展product
。
当我使用objectmapper
序列化它时,
ObjectMapper mapper = new ObjectMapper();
Product p = new SomeProduct();
String json = mapper.writeValueAsString(p);
这是输出:
Product x = mapper.convertValue(json, Product.class);
将引发此异常:
java.lang.IllegalArgumentException:意外的标记(VALUE_STRING),应为field_name:缺少包含类型id(类com.shubham.model.product的)的属性“type”,位于[源:n/a;行:-1,列:-1]
我在这里做错了什么?我观察了一下,发现了一个问题,在JsonTypeInfo
中使用了DefaulTimpl
。但是我不能将json反序列化回“默认IMPL”,因为json对于特定的实现总是有效的。
使用Jackson 2.4.3
您错误地使用了mapper.convertvalue(json,product.class);
。您应该使用:mapper.readvalue(json,product.class);
convertValue使用:
用于从给定值到给定值类型的实例的两步转换的方便方法,如果(但仅当!)需要转换。如果给定的值已经属于请求的类型,则按原样返回值。
好的,我知道有一堆类似的问题,但似乎都行不通。 我为我的实体设置了以下结构。 在我的控制器中,我尝试将一个请求映射到下面的方法。 请尝试%1 我认为它是这样做的--添加了一个元数据属性,该属性将存储子类类。 结果是什么。 结果是什么。 即使将和添加到这两个子类中,也会得到相同的结果。 其他尝试 我试了很多。什么都不起作用。不会包含这里的所有内容。 我觉得应该有一个简单的方法来做到这一点,但我只是不
我试图通过Kotlin使用Jackson对lastfm api提供的xml进行反序列化。我用JAXB在Java中实现了这一点,我正在尝试移植它。除以下示例中的“未包装列表”字段外,所有功能都正常工作。我知道Track数据类正在工作,因为如果我使用而不是
在下面的示例中,我有一个主类-A和它的子类-B。两者都可以用作一般类X中的属性。 如何使用Jackson多态特性将以下给定的json正确反序列化为各自的类: JSON A: JSON B: 预期结果:将keys对象映射到JSON A的类A和JSON B的类B。 请提出其他建议。
我正在尝试使用JSON ObjectMapper反序列化对象。我在尝试反序列化时看到以下错误
我有以下JSON: 这基本上是一个包含项集合的对象。 所以我做了一个类来反序列化: 我尝试添加,但没有成功。 怎么走?
假设我有以下格式的JSON: 我试图避免自定义反序列化程序,并试图将上述JSON(称为Wrapper.java)反序列化为JavaPOJO。“type”字段指示“object”反序列化,即type=foo表示使用foo.java反序列化“object”字段。(如果type=Bar,则使用Bar.java反序列化对象字段)。Metadata/owner将始终以相同的方式对每个元数据使用简单的带Jac