我有一个像这样的json字符串
{
"code": "200",
"data": "",
"datadetail": null,
"message": "Khách hàng không tồn tại",
"description": "KH_NOTFOUND:"
}
因为data属性的值为“”,所以对象映射器无法将该字段映射到Java POJO中,无论如何是将data属性的值修改为如下所示的特定字符串
{
"code": "200",
"data": "no data",
"datadetail": null,
"message": "Khách hàng không tồn tại",
"description": "KH_NOTFOUND:"
}
详细信息
无法实例化类型[collection type;的值;类java.util.ArrayList,包含来自字符串值(“)的[简单类型,类vnptpay.collection.adapter.partner.water.laichau.Datum]];没有单字符串构造函数/工厂方法
这是我要映射的目标Java对象类
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"code",
"data",
"datadetail",
"message",
"description"
})
@JsonIgnoreProperties(ignoreUnknown = true)
public class GetBillResponse implements Serializable{
@JsonProperty("code")
private String code;
@JsonProperty("data")
private ArrayList<Datum> data = null;
@JsonProperty("datadetail")
private Object datadetail;
@JsonProperty("message")
private String message;
@JsonProperty("description")
private String description;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
这是我的映射代码
ObjectMapper mapper = new ObjectMapper();
GetBillResponse obj = null;
obj = mapper.readValue(output.toString(), GetBillResponse.class);
答案 0 :(得分:0)
假设output.toString()是您的JSON字符串,则可以添加.replace(“ \” \“”,\“ {none} \”)。 Java 应该可以将其解释为带有一个元素的ArrayList(也许我的语法是错误的,但是肯定有一种从字符串初始化ArraList的方法)。
编辑:现在我考虑了一下,您可能需要JSON语法而不是Java语法,因此.replace(“ \” \“”,\“ [] \”)或类似的东西。
答案 1 :(得分:0)
如评论中所述,您正在从错误的类型进行映射。
在您的JSON "data": ""
中指的是字符串字段名称 data 。当Java代码映射它时,由于传递的默认值是一个字符串,它会尝试查找一个 ArrayList 构造函数,该构造函数采用您在Java代码中将其定义为列表的字符串:
@JsonProperty("data")
private ArrayList<Datum> data = null;
所以您现在有2个选项:
您发送了一个有效的JSON数组,该数组将映射到"data": []
之类的列表中。 (假设您有一个Datum(String value)
之类的构造函数)
您将Java代码中的数据映射更改为 String ,并稍后将其映射至ArrayList(如果对于实例,您将字符串拆分为逗号左右)
< / li>为了记录,我不建议您将数据映射到 ArrayList ,而是将其映射到 List ,因为引用接口是常见的最佳实践而不是实现!