'Cannot deserialize value of type `java.lang.String` from Array value from mockmvc
public class ModelDTO implements Serializable {
    private Long id;
    private String datasetName;
 
    @JsonRawValue
    private String json;
}
Post API is working fine from postman or swagger if I send the following body.
{
  "id": 1,
  "datasetName": "Insurance",
  "json" : "[{\"ClassName\":\"AAAA\",\"Fields\":[[\"cdsa\",\"csa\"],[\"ca\"]]},{\"ClassName\":\"ca\",\"Fields\":[null]}]"
}
But MockMVC test case is giving follwing error in Spring boot project
Bad Request: JSON parse error: Unexpected character ('C' (code 67)): was expecting comma to separate Object entries; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('C' (code 67)): was expecting comma to separate Object entries at [Source: (PushbackInputStream); line: 1, column: 89]
mockMvc.perform(post(ENTITY_API_URL).contentType(MediaType.APPLICATION_JSON).content(new ObjectMapper().writeValueAsString(ModelDTO))).andExpect(status().isCreated());
Solution 1:[1]
I believe you don't actually need @JsonRawValue so try removing it:
public class ModelDTO implements Serializable {
    private Long id;
    private String datasetName;
    private String json;
}
Solution 2:[2]
my json were not properly set. it requires backword slash for parsing. I have added extra two backword slash like '\' and now it is working.
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\\\"]]}]\"";
I have referred following link to solve this issue.
Solution 3:[3]
In my case I had incorrect Type definition. e.g.
public class ModelDTO implements Serializable {
    private Long id;
    private String datasetName;
 
    private String part;
}
So I had to correct it as:
public class ModelDTO implements Serializable {
    private Long id;
    private String datasetName;
 
    private List<String> part;
}
That solved my issue.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | João Dias | 
| Solution 2 | rhl mngl | 
| Solution 3 | 
