I am having an issue with resolving a single object as an array I have used the following property
# JACKSON (JacksonProperties).
spring.jackson.deserialization.ACCEPT_SINGLE_VALUE_AS_ARRAY=true
In addition to the above I have configured a rest template as follows:
@Test
public void testSingleObject() {
RestTemplate restTemplate = new RestTemplate();
ObjectMapper mapper = new ObjectMapper();
MappingJackson2HttpMessageConverter convertor = new MappingJackson2HttpMessageConverter();
convertor.setObjectMapper(mapper);
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
restTemplate.getMessageConverters().add(convertor);
MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
mockServer.expect(requestTo("/test/1")).andExpect(method(HttpMethod.GET))
.andRespond(withSuccess("{\"size\":\"1\",\"Value\":{\"@id\": \"1\",\"description\":\"Some Text\"}}", MediaType.APPLICATION_JSON));
// JsonNode jsonNode = restTemplate.getForObject("/test/{id}", JsonNode.class, 1);
mycalss value = restTemplate.getForObject("/test/{id}", myclass.class, 1);
System.out.print(value.toString());
}
I am using spring-boot 1.3.2, the error I get is
Could not read document: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
Ps: If I try this without rest template it works as expected
@Test
public void testSingleObject3() throws IOException {
final String json = "{\"size\":\"1\",\"Value\":{\"@id\": \"1\",\"description\":\"Some Text\"}}";
final ObjectMapper mapper = new ObjectMapper()
.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
myclass value = mapper.readValue(json,
new TypeReference<myclass>() {
});
System.out.println(value.toString());
}
my class is defined a follows :
//@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class myclass {
@JsonProperty("size")
private String Size;
@JsonProperty("value")
private List<mysubclass> mysubclass;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
//... setters and getters
mysubclass is defined as follows:
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"id",
"description"
})
public class mysubclass {
@JsonProperty("@id")
private String Id;
@JsonProperty("description")
private String description;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
Regards
myclass?