【问题标题】:Getting the following error no single-String constructor/factory method得到以下错误没有单字符串构造函数/工厂方法
【发布时间】:2023-03-16 13:26:01
【问题描述】:

下面是我在java中使用jackson解析的json字符串

String rspString = "{\"currency\": [{\"USD\": [\"U.S.Dollar\",\"$\"]},\"USD\"]}";

JsonUtil jsonUtil = new JsonUtil();
        API1Response configAPI1Rsp = new API1Response();
        API1Rsp = (API1Response) jsonUtil.Json2Object(rspString, configAPI1Rsp);

public class API1Response 
{
   @JsonProperty("Currency")
   public List<Currency> currency;
   //getters and setters
}

public class Currency()
{
   @JsonProperty("USD")
   public List<USD> USD

  //getters and Setters
}

当我运行上面的代码时,我得到了以下错误:

无法从字符串值 ('USD') 实例化类型 [简单类型,com.sample.test.Currency] 类型的值;没有单字符串构造函数/工厂方法

在上面的响应字符串中如何对待 USD(对象中的最后一个)如何在 java 中为该对象定义。

提前致谢。

【问题讨论】:

  • 上面贴的代码是否正确?它编译吗? public class Currency()我认为它不应该有括号()请发布确切的工作代码
  • 还要添加 Currency 类的构造函数。我认为可能没有一个接受单个字符串或没有参数的方法,而且您可能没有工厂方法。
  • 对不起那个错字,他们不是“()”类货币。你能举个例子,这样它会引导我走上正确的道路

标签: java json jackson


【解决方案1】:

@JsonProperty("Currency") - 确保 "Currency" 应该是小写的,因为它在 json 字符串中。

【讨论】:

    【解决方案2】:

    当您将对象数组转换为 Java 对象时,您在 Json 中的货币键是对象数组和字符串。因此,您需要修改 json 字符串,使其仅包含对象。 IE。第二个元素“USD”不是对象,因此您收到错误“没有单字符串构造函数/工厂方法”。

    【讨论】:

    • 以这种方式开发的 json 字符串无法删除该元素 USD,因为这是必需的。请帮助我如何从 json 中获取值。
    • 你能分享一下你的美元课吗
    • USD 是一个数组,其值我已声明为 empltypublic class USD { }
    【解决方案3】:

    怎么样,

    public class wallet {
        List<Currency> currency;
    }
    

    "{\"currency\": [{\"USD\": [\"U.S.Dollar\",\"$\"]},]}"; or
    "{\"currency\": [{\"USD\": [\"U.S.Dollar\",\"$\"]},\"USD\":[]]}";
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    猜你喜欢
    • 1970-01-01
    • 2018-02-12
    • 2012-09-29
    • 2014-07-20
    • 2014-10-01
    • 2019-01-21
    • 2018-01-21
    • 1970-01-01
    • 2017-03-03
    相关资源
    最近更新 更多