无法从mockmvc的Array值反序列化"java.lang.String"类型的值


public class ModelDTO implements Serializable {
private Long id;
private String datasetName;

@JsonRawValue
private String json;
}

邮政API是工作良好的邮递员或招摇撞骗,如果我发送以下身体。

{
"id": 1,
"datasetName": "Insurance",
"json" : "[{"ClassName":"AAAA","Fields":[["cdsa","csa"],["ca"]]},{"ClassName":"ca","Fields":[null]}]"
}

但是MockMVC测试用例在Spring引导项目中给出了以下错误

错误的请求:JSON解析错误:意外字符('C'(代码67((:应使用逗号分隔Object条目;嵌套异常为com.fasterxml.jackson.core.JsonParseException:意外字符('C'(代码67((:应使用逗号分隔对象条目在[来源:(PushbackInputStream(;行:1,列:89]

mockMvc.perform(post(ENTITY_API_URL).contentType(MediaType.APPLICATION_JSON).content(new ObjectMapper().writeValueAsString(ModelDTO))).andExpect(status().isCreated());

在我的案例中,类型定义不正确。例如

public class ModelDTO implements Serializable {
private Long id;
private String datasetName;

private String part;
}

所以我不得不将其更正为:

public class ModelDTO implements Serializable {
private Long id;
private String datasetName;

private List<String> part;
}

这解决了我的问题。

我相信您实际上并不需要@JsonRawValue,所以请尝试删除它:

public class ModelDTO implements Serializable {
private Long id;
private String datasetName;
private String json;
}

我的json设置不正确。它需要反斜杠进行解析。我添加了额外的两个反斜杠,如"\",现在它正在工作。

private static final String DEFAULT_JSON = ""[{\"ClassName\":\"Health Aditya Birla\",\"Fields\":[[\"Insured Person's Details\",\"Gender\",\"Member ID\"],[\"Policy Details\",\"Insured Person's Details\"],[\"Premium Certificate\"]]},{\"ClassName\":\"Health Care\",\"Fields\":[[\"Details of Insured\",\"Relationship\",\"Date Of Birth\"],[\"Mobile No\"],[\"Gross Premium\",\"Goods & Services Tax\"]]}]"";

我参考了以下链接来解决这个问题。

在此处输入链接描述

相关内容

最新更新