@Value // or @Data Lombok
public class Bar {
private final BigDecimal value;
@JsonCreator
public Bar(double value) {
this.value = BigDecimal.valueOf(value);
}
}
我编写了一个通过的单元测试:
@Test
void test() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
Bar bar = new Bar(12.34);
assertEquals(mapper.readValue("12.34", Bar.class), bar);
}
但是当我向控制器发送POST时,它无法反序列化请求正文(它只是12.34
要反序列化为Bar
实例),出现以下错误:
JSON解析错误:无法构造com.example.demo.bar
的实例(尽管至少存在一个创建者):没有双/双参数构造函数/工厂方法可以从数字值反序列化(12.34);嵌套异常是com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造com.example.demo.bar
的实例(尽管至少存在一个创建者):没有从数字值反序列化的双/双参数构造函数/工厂方法(12.34)
@jsoncreator
应与@jsonproperty
一起使用,以指定如何反序列化JSON对象。例如,如果您有一个JSON喜欢的rest控制器:
{
"value": 123
}
您的构造函数应该这样注释:
@JsonCreator
public Bar(@JsonProperty("value") double value) {
this.value = BigDecimal.valueOf(value);
}
尽管这可能是多余的,但其思想是,当您打算反序列化的JSON与您的属性名称不匹配时,这允许更灵活的操作。
public class Example {
private final BigDecimal myValue;
@JsonCreator
public Bar(@JsonProperty("value") double myValue) {
this.myValue= BigDecimal.valueOf(myValue);
}
}
问题内容: 我应该如何反序列化以下JSON以跳过根元素并仅解析此JSON的内部。我想避免创建其他仅包含字段的3rd类。 因此,我只希望有以下两个类: 问题答案: 您可以为此使用库。 下面的代码将解决您的问题。
问题内容: 我正在使用一个Android应用程序,该应用程序是从Web服务下载JSON数据的。解析数据的类如下所示: 当我从应用程序内部调用时,它构建良好并且可以正常工作,但是当我尝试在单元测试中测试此方法时,出现以下异常: 默认情况下,Android框架随附的软件包的类似乎在Java中不可用。 有没有一种方法可以解决此问题,以便可以对解析JSON的类进行单元测试? 问题答案: 您需要做的就是将以
Android 进行单元测试难在哪-序 原文链接 : Against Android Unit Tests 原文作者 : Matthew Dupree 译文出自 : 开发技术前线 www.devtf.cn 译者 : chaossss 校对者: Rocko 状态 : 完成 其实不仅仅只有普通 Android 开发工程师觉得测试 Android 应用很恼火,大牛们也受此困扰已久。例如 Jake Wha
这很奇怪,我不知道该如何解释清楚。请耐心听我说,请查看代码片段以了解详细信息。 我使用枚举实现了一个单例。枚举有一个私有构造函数,在构造对象之前,我只在其中执行很少的操作和验证。对于所有这些验证,我将抛出一些异常(如IllegalArgumentException)。 我的测试用例包括针对负面和正面场景的测试。每当有两个以上的测试用例混合了负面和正面的测试用例时,我就会得到以下异常:。请检查下面的
问题内容: 这是我的课 最初的一个实际上需要转换为良好的json数据。这是最初的坏人 这是我的json数据,我无法反序列化。即使更改,我仍会收到默认值 我的自定义封面 问题答案: 您可以使用json.net以显示的格式对a进行反序列化和重新序列化,只要您使用custom即可。这是必需的,因为默认情况下,对象集合在JSON数组之间进行序列化,但是在JSON中,对象集合以单个对象的紧凑形式进行序列化,