Jackson MismatchedInputException(没有从String值反序列化的String参数构造函数



我正在使用SpringBoot 2.3.1-RELEASE,并试图将JSON字符串反序列化为包含对象列表的POJO,但我一直遇到以下错误:

无法构造com.response.dto.RootDTO的实例(尽管至少存在一个Creator(:没有可从String值('Meta'(反序列化的String参数构造函数/工厂方法在[Source:(String("Meta":[{"DimensionName":"Version","DimensionId":"3b4860b9-b215-4192-bd7a-a76f377fc465","DimensionType":"Regular","Alias":"C0","AttributeId":"211d5-d91f-40ec-9668-20e0da2ae7b3","AttributeName":"版本名称"、"AttributeKey":"VersionKey";行:1,列:1]

这就是我的JSON字符串的样子(但在eclipse中有转义字符(:

{"Meta":[{"DimensionName":"Version","DimensionId":"3b4860b9-b215-4192-bd7a-a76f377fc465,"DimensionType":"Regular","Alias":"C0","AttributeId":"211b33d5-d91f-40ec-9668-20e0da2ae7b3","AttributeName":"Version Name","AttributeKey":"VersionKey"}]}。

这是我想将其反序列化为的类:

@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class RootDTO 
{
@JsonProperty("Meta")
private List<MetaDTO> Meta;
}

@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class MetaDTO 
{
@JsonProperty("DimensionName")
private String DimensionName;
@JsonProperty("AttributeId")
private String AttributeId;
@JsonProperty("AttributeName")
private String AttributeName;
@JsonProperty("Name")
private String Name;
@JsonProperty("Alias")
private String Alias;
}

这是在尝试读取值时弹出的代码:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

objectMapper.readValue(jsonFormattedString, RootDTO.class));

我只在运行Junit(版本:4.12(时看到这个问题。我在堆栈跟踪中看到jackson-databind-2.11.0spring-test-5.2.7.RELEASE。然而,我使用浏览器或邮递员的调用进行调试,它运行良好。当我指定它为列表时,我不确定它为什么要查找字符串Meta。是什么原因导致了这个问题?有什么建议吗?

编辑:原来提供给ObjectMapper的字符串不是正确的。有这行代码String jsonFormattedString = responseEntity.getBody().substring(1, responseEntity.getBody().lastIndexOf(""")).replaceAll("\\", "");使我的模拟字符串无效。我需要弄清楚我们为什么要这么做。

将变量的第一个字母改为小写。并删除JsonProperty。

如下所示。并自动生成setter和getter。

private字符串DimensionName;

private String attributeId;
private String attributeName;
private String name;
public void setName(String name){
this.name=name;
}
.........
.........
//All setter getter

为每个getter方法添加@JsonGetter("Meta")

例如,如下所示。

@JsonGetter("Meta")
public List<Meta> getMeta(){
return meta;
}

相关内容

  • 没有找到相关文章

最新更新