我有一个Money类,它带有用于数值和字符串值的工厂方法。我想使用它作为我的输入POJO的属性。
我为它创建了一些转换器,这是字符串:
@Component
public class StringMoneyConverter implements Converter<String, Money> {
@Override
public Money convert(String source) {
return Money.from(source);
}
}
public class MoneyTestPojo {
private Money value;
//getter and setter ommited
}
我有一个需要POJO的endpoint:
@PostMapping("/pojo")
public String savePojo(@RequestBody MoneyTestPojo pojo) {
//...
}
最后,这是请求体:
{
value: "100"
}
尝试此请求时出现以下错误:
我是不是漏掉了什么?
编辑:正如所问的,下面是金钱类:
public class Money {
public static final Money ZERO = new Money(BigDecimal.ZERO);
private static final int PRECISION = 2;
private static final int EXTENDED_PRECISION = 16;
private static final RoundingMode ROUNDING = RoundingMode.HALF_EVEN;
private final BigDecimal amount;
private Money(BigDecimal amount) {
this.amount = amount;
}
public static Money from(float value) {
return Money.from(BigDecimal.valueOf(value));
}
public static Money from(double value) {
return Money.from(BigDecimal.valueOf(value));
}
public static Money from(String value) {
if (Objects.isNull(value) || "".equals(value)) {
return null;
}
return Money.from(new BigDecimal(value));
}
public static Money from(BigDecimal value) {
if (Objects.requireNonNull(value).equals(BigDecimal.ZERO)) {
return Money.ZERO;
}
return new Money(value);
}
//(...)
}
使用@JSonCreator
(来自com.fasterxml.jackson.annotation
包)注释工厂方法将解决此问题:
@JsonCreator
public static Money from(String value) {
if (Objects.isNull(value) || "".equals(value)) {
return null;
}
return Money.from(new BigDecimal(value));
}
我刚测试过,对我有效。除了示例请求(value
应该在引号中)之外,您的其余代码看起来都很好,但我猜这只是一个错误。
更新1:
public class MoneyDeserializer extends StdDeserializer<Money> {
private static final long serialVersionUID = 0L;
public MoneyDeserializer() {
this(null);
}
public MoneyDeserializer(Class<?> vc) {
super(vc);
}
@Override
public Money deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
String value = node.textValue();
return Money.from(value);
}
}
只需在objectmapper
中注册它。
问题内容: 假设我使用的是我不知道其源代码的库。它具有返回List的方法,如下所示: 我想知道这是否是个好主意: 例如,如果getObjs()中List的具体实现是a,那么是否会存在某种类型的差异? 问题答案: 不,这不是一个好主意。除非出于某种原因您需要从中执行特定操作,否则应始终使用接口()声明列表变量。 另外,如果您这样做,则需要确保返回的列表是。在这种情况下,的承诺合同只是返回类型是的某种
我需要使用runOnUiThread来更新UI中的TextView,同时在从WebService获取一些字符串的工作线程中更新TextView。我看了一些其他的帖子,并试图实现提供的解决方案,但当我启动我的应用程序,它崩溃。我不太熟悉这个方法,所以我需要一些方向,如何解决这个问题。
我有一个android应用程序,我正在尝试在其中实现linkedIn登录。LinkedIn SDK已经成功集成,我正在获取用户信息以及电子邮件地址。 以下是我的应用程序在谷歌登录时的工作方式: 1)在手机上获取访问令牌 2)发送带有访问令牌的电子邮件地址到服务器 3) 用我通过谷歌的webapi收到的访问令牌获取用户的详细信息。 4) 如果回复电子邮件与从移动设备接收的电子邮件匹配,则检查该电子邮
问题内容: 我上课很难。麻烦的是,我正在尝试将包裹中的一个成员写入对象,这是一个对象。的是,和对象()在列表中的。 以下是相关代码: 我在“ //帮助这里”标记了两个点,以了解如何正确地写包裹以及如何对其进行重建。如果经过(正确测试),我该如何正确执行? 问题答案: 你差点知道了! 您只需要做: 就这样! 对于您的Integer列表,您还可以执行以下操作: 它应该工作。
我正在寻找关于如何以及何时实现dispose模式的建议。 我已经阅读了MSDN关于如何实现dispose()模式的文章。说得通。我在我的类中实现了它,但它似乎对内存使用没有什么影响。 有点背景,我正在建立一个2D自顶向下的游戏引擎。我有一个名为Gatherer的单元,它继承自Actor(一个用于绘制sprite和跟踪viewplane的基本类),它们是一些简单的sprite。它们在5轮比赛后消失。
我有一个。mp4视频文件,包含高级3.1“avc1.64001f”视频和低复杂度AAC“mp4a.40.2”音频。 如何通过使用libfdk_aacFFmpeg编码器将低复杂度AAC转换为“HE-AAC”音频编解码器并保持/获得尽可能好的质量?我只想将“avc1.64001f”视频复制到目标文件中。