Date deserialize problem in Camunda Spring Boot

Error:
Cannot instantiate process definition 3f8f5a24-5038-11e8-98c9-0242ac120014: Cannot convert value ‘2018-05-05T10:34:04.808039+00:00’ of type ‘Date’ to java type java.util.Date

Camunda 7.8.0
Camunda Spring Boot 2.3.0
Spring Boot 2.0.1

When trying to start process over REST API, the error is throwd:

Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type java.util.Date from String “2018-05-05T10:34:04.808039+00:00”: not a valid representation (error: Failed to parse Date value ‘2018-05-05T10:34:04.808039+00:00’: Unparseable date: “2018-05-05T10:34:04.808039+00:00”)
at [Source: (String)"“2018-05-05T10:34:04.808039+00:00"”; line: 1, column: 1]
at com.fasterxml.jackson.databind.exc.InvalidFormatException.from(InvalidFormatException.java:67)
at com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:1548)
at com.fasterxml.jackson.databind.DeserializationContext.handleWeirdStringValue(DeserializationContext.java:910)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseDate(StdDeserializer.java:524)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseDate(StdDeserializer.java:467)
at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateBasedDeserializer._parseDate(DateDeserializers.java:195)
at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateDeserializer.deserialize(DateDeserializers.java:285)
at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateDeserializer.deserialize(DateDeserializers.java:268)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4001)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2992)
at org.camunda.bpm.engine.rest.dto.VariableValueDto.toTypedValue(VariableValueDto.java:101)
… 122 more

I tried several ways to solve problem but nothing works:

  1. Change the jackson date format property in application.yaml file:
    spring:
    jackson:
    date-format: yyyy-MM-dd’T’HH:mm:ss.SSSSSSZ

  2. Override mapper bean in configuration component:
    @Bean
    public ObjectMapper mapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    //objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    objectMapper.setDateFormat(new CustomDateFormat());
    objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    return objectMapper;
    }
    As you can see, Spring Boot should use my custom CustomDateFormat class - but not.

I have no idea where comes this weird date from Camunda side when starting new process:
2018-05-05T10:34:04.808039+00:00

Tnx!
Erki

Would you try with this bean configuration:

@Bean
public ServletContextInitializer initializer() {
	return new ServletContextInitializer() {
		@Override
		public void onStartup(ServletContext servletContext) throws ServletException {
			servletContext.addListener(new CustomJacksonDateFormatListener());
			servletContext.setInitParameter("org.camunda.bpm.engine.rest.jackson.dateFormat",
					"yyyy-MM-dd'T'HH:mm:ss");
		}
	};
}
2 Likes

Wow! Thanks! Really, it works now!