gpt4 book ai didi

java - 由于InvalidDefinitionException,javamoney的CurrencyUnit不能用作字段的类并被Jackson反序列化

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

我有一个 pojo,它有一个来自 javamoney 库的 CurrencyUnit 类型的字段。当我编码这个 pojo 时, jackson 抛出了一个异常。我记得当我没有定义任何默认构造函数时出现此异常。但在这种情况下,我无法维护 CurrencyUnit 类,因为它来自依赖项。我怎样才能继续这项工作?

异常(exception):

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `javax.money.CurrencyUnit` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information\n at 

最佳答案

您应该为要使用或注册已创建模块的 javax.money 包中的每种类型编写自定义序列化器/反序列化器。例如:jackson-datatype-money .

您需要添加dependency :

<dependency>
<groupId>org.zalando</groupId>
<artifactId>jackson-datatype-money</artifactId>
<version>1.3.0</version>
</dependency>

简单的使用示例:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.zalando.jackson.datatype.money.MoneyModule;

import javax.money.CurrencyUnit;
import javax.money.Monetary;

public class JsonMoneyApp {

public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.registerModule(new MoneyModule());

CurrencyUnit cu = Monetary.getCurrency("USD");
String json = mapper.writeValueAsString(cu);
System.out.println(json);

CurrencyUnit unit = mapper.readValue(json, CurrencyUnit.class);
System.out.println(unit);
}
}

上面的代码打印:

"USD"
USD

关于java - 由于InvalidDefinitionException,javamoney的CurrencyUnit不能用作字段的类并被Jackson反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58715241/

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