我有一个 pojo,它有一个 type 字段CurrencyUnit
来自 javamoney 库。当我编组这个 pojo 时,杰克逊抛出了一个异常。我记得当我没有定义任何默认构造函数时出现此异常。但在这种情况下我无法维持CurrencyUnit
类,因为它来自依赖项。我怎样才能继续这项工作?
例外:
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
您要使用的包或注册已创建的模块。例如:杰克逊数据类型金钱 https://github.com/zalando/jackson-datatype-money.
你需要添加依赖性 https://mvnrepository.com/artifact/org.zalando/jackson-datatype-money/1.3.0:
<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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)