I have a Spring-Boot JHipster 7.9.4 application (node 16, java 11) which I’m building as a docker image with Gitlab CI for production. Since a couple of weeks, I get an error like this for requests only to the production website which use the filter API for dates:
Bad Request: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'UFZMeasurementCriteria' on field 'date.equals':
rejected value [2024-05-20];
codes [
typeMismatch.UFZMeasurementCriteria.date.equals,
typeMismatch.date.equals,
typeMismatch.equals,
typeMismatch.java.time.LocalDate,
typeMismatch
];
arguments [
org.springframework.context.support.DefaultMessageSourceResolvable:
codes [
UFZMeasurementCriteria.date.equals,
date.equals
];
arguments [];
default message [date.equals]
];
default message [
Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDate' for property 'date.equals';
nested exception is org.springframework.core.convert.ConversionFailedException:
Failed to convert from type [java.lang.String] to type [java.time.LocalDate] for value '2024-05-20';
nested exception is java.lang.IllegalArgumentException:
Parse attempt failed for value [2024-05-20]
]
I’ve configured ISO dates in my application.yml file like:
spring:
mvc:
format:
date: iso
time: iso
date-time: iso
Also I have defined a @Configuration
class which is definitely loaded at runtime:
@Configuration
public class DateTimeFormatConfiguration implements WebMvcConfigurer {
private final Logger log = LoggerFactory.getLogger(DateTimeFormatConfiguration.class);
@Override
public void addFormatters(FormatterRegistry registry) {
log.info("Registering date and time formatting parsers for API.");
DateTimeFormatterRegistrar datetimeRegistrar = new DateTimeFormatterRegistrar();
datetimeRegistrar.setUseIsoFormat(true);
datetimeRegistrar.registerFormatters(registry);
DateFormatterRegistrar dateRegistrar = new DateFormatterRegistrar();
dateRegistrar.setFormatter(new DateFormatter("yyyy-MM-dd"));
dateRegistrar.registerFormatters(registry);
}
}
I’m building the project with this CI job definition. I’ve tried to build the docker container locally exactly as the CI but the error does not occur. I’ve also tried to switch the building as well as the runtime docker image. I’m complete lost, since this error is not reproducable on my machine, not even when running the exact production release image on my local machine.
For further information here is the full stack trace for a request like this:
https://klimadashboard.danielgerber.eu/api/ufz-measurements?date.specified=true&date.equals=2024-05-20&size=2147483647
{
"type": "https://zalando.github.io/problem/constraint-violation",
"title": "Constraint Violation",
"status": 400,
"stacktrace": [
"org.zalando.problem.ProblemBuilder.build(ProblemBuilder.java:83)",
"eu.danielgerber.web.rest.errors.ExceptionTranslator.process(ExceptionTranslator.java:89)",
"org.zalando.problem.spring.web.advice.AdviceTrait.create(AdviceTrait.java:131)",
"org.zalando.problem.spring.web.advice.AdviceTrait.create(AdviceTrait.java:115)",
"org.zalando.problem.spring.web.advice.validation.BaseValidationAdviceTrait.newConstraintViolationProblem(BaseValidationAdviceTrait.java:52)",
"org.zalando.problem.spring.web.advice.validation.BindAdviceTrait.handleBindingResult(BindAdviceTrait.java:30)",
"java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
"java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)",
"java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)",
"java.base/java.lang.reflect.Method.invoke(Unknown Source)",
"org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)",
"org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)",
"org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)",
"org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.doResolveHandlerMethodException(ExceptionHandlerExceptionResolver.java:428)",
"org.springframework.web.servlet.handler.AbstractHandlerMethodExceptionResolver.doResolveException(AbstractHandlerMethodExceptionResolver.java:75)",
"org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:142)",
"org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException(HandlerExceptionResolverComposite.java:80)",
"org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1330)",
"org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1141)",
"org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1087)",
"org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)",
"org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)",
"org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)",
"javax.servlet.http.HttpServlet.service(HttpServlet.java:497)",
"org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)",
"javax.servlet.http.HttpServlet.service(HttpServlet.java:584)",
"io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)",
"io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)",
"org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)",
"io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)",
"io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337)",
"org.springframework.security.web.access.intercept.AuthorizationFilter.doFilterInternal(AuthorizationFilter.java:73)",
"org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)",
"org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)",
"org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:166)",
"org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"eu.danielgerber.security.jwt.JWTFilter.doFilter(JWTFilter.java:37)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)",
"org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)",
"org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)",
"org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)",
"org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112)",
"org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)",
"org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)",
"org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)",
"org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)",
"org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221)",
"org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186)",
"org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)",
"org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)",
"io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)",
"io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)",
"org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)",
"org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)",
"io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)",
"io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)",
"org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)",
"org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)",
"io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)",
"io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)",
"org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)",
"org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)",
"io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)",
"io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)",
"org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)",
"org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)",
"io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)",
"io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)",
"io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)",
"io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)",
"io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)",
"io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)",
"io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)",
"io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117)",
"io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)",
"io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)",
"io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)",
"io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)",
"io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)",
"io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)",
"io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)",
"io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)",
"io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)",
"io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)",
"io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:275)",
"io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:79)",
"io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:134)",
"io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:131)",
"io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)",
"io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)",
"io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:255)",
"io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:79)",
"io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:100)",
"io.undertow.server.Connectors.executeRootHandler(Connectors.java:387)",
"io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:852)",
"org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)",
"org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019)",
"org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558)",
"org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449)",
"org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282)",
"java.base/java.lang.Thread.run(Unknown Source)"
],
"path": "/api/ufz-measurements",
"violations": [
{
"field": "date.equals",
"message": "Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDate' for property 'date.equals'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.time.LocalDate] for value '2024-05-20'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2024-05-20]"
}
],
"message": "error.validation"
}