1

Our current class looks like

public class Attributes {

  private String mapping;

  .....

and

{
  "mapping": "displayName",
  .....

This has worked well and shipped to customers.

The way we convert JSON to Attribute class is

JSON.readValue(jsonFile, Attribute.class);

Recently the requirement says, that mapping would be List<String> instead of String

At first, the quick change that I thought of was to change mapping to List<String>, but this would break existing clients.

I tried that by writing test that does

assertEquals("displayName", configuration.getMapping().get(0));  

and it failed as

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token

Question
How can I tell Jackson to read a String as `List? It would be List of 1 item but would be backward compatible.

Thanks

daydreamer
  • 87,243
  • 191
  • 450
  • 722

1 Answers1

2

The answer is Can not deserialize instance of java.util.ArrayList out of VALUE_STRING

objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
Community
  • 1
  • 1
daydreamer
  • 87,243
  • 191
  • 450
  • 722