当前位置: 首页 > 知识库问答 >
问题:

无法从mockmvc的数组值反序列化类型“java.lang.String”的值

柯耀
2023-03-14
public class ModelDTO implements Serializable {

    private Long id;
    private String datasetName;
 
    @JsonRawValue
    private String json;
}

如果我发送下面的正文,Post API在postman或swagger上工作正常。

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

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

错误请求:JSON解析错误:意外字符('C'(代码67)):期望逗号分隔Object条目;嵌套异常com.fasterxml.jackson.core.JsonParseException:意外字符('C'(代码67)):期望逗号分隔Object条目[来源:(PushbackInputStream);第1行,第89列]

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

共有3个答案

尚鸿才
2023-03-14

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

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;
}

这解决了我的问题。

冉弘化
2023-03-14

我的 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\\\"]]}]\"";

为了解决这个问题,我引用了以下链接。

在此处输入链接描述

吕鸿轩
2023-03-14

我相信你实际上并不需要@JsonRawValue所以试着删除它:

public class ModelDTO implements Serializable {
    private Long id;
    private String datasetName;
    private String json;
}
 类似资料:
  • 使用Spring1.5.8释放Jackson mapper,给出以下异常。 在[源:未知;行:-1,列:-1](通过引用链:com.copart.conversationapi.CallDisposition.model.vo.CallLogEntity[“CallEndTime”]) Callentity.java java pom.xml

  • 我使用的是带有Rest控制器的spring boot。我有一个@PostMapping,Requestbody的对象id类型为UUID。当我试图测试邮递员的邮件请求时,我得到以下错误。 “JSON分析错误:无法从字符串中反序列化类型的值\”4BE4BD08CFDF407484F6A04131790949\“:UUID必须用标准36字符表示形式表示;嵌套异常为com.fasterxml.jackso

  • 由于以下异常,我无法反序列化Java-8-locatedate JSON分析错误:无法从字符串“15/09/1978”反序列化< code>java.time.LocalDate类型的值:无法反序列化Java . time . local date(Java . time . format。无法在索引0处分析DateTimeParseException)文本“15/09/1978”; 包含Date

  • 我有一门课是这样的: 但是当我试图序列化它时,我收到一个错误,上面写着“试图序列化java.lang.class:java.lang.字符串。忘记注册一个类型适配器了吗?”。所以我创建了这个适配器: } 并登记如下: 但我还是犯了同样的错误<我做错了什么 适配器的实现看起来正常吗?

  • 我有一个spring boot应用程序,通过gradle插件生成一个java客户端: 我选择了作为,因为这似乎是使用java1.8的项目的首选。 对于生成的客户端,我正在执行一个请求,该请求返回一个包含时间戳的对象。我得到以下错误: 有关类的相关部分: 这两种setter方法都接受对象,并且没有注释,因此转换必须在别处进行。输入字符串也是“2020-07-21T12:12:23.000 0200”

  • 问题内容: 我正在尝试将json数据反序列化为模型类,但是失败了。这是我的工作: 这是我的模型的样子: 您可以看到我到达这里的Json:http : //api.worldbank.org/incomeLevels/LIC/countries? format=json 这是我得到的错误: 无法将JSON数组反序列化为“ Mvc4AsyncSample.Models.CountryModel”类型。