Q:

Site resources leaks into UUID in GetMapping

I have researched this issue a lot and I did not manage to find anyone mentioning anything similar. 
I am creating a spring boot app and using GetMapping to map my resources.  For some reason, I am getting strange errors when I am using UUID as my PathVariable. 
Controller.java
@GetMapping("/test/{id1}")
public String testMethod(@PathVariable UUID id1){
    return "test";
}    

Request:
/test/b74adb59-af60-423e-a3dd-c2f356114b51

test.html - with the stylesheet that does not exist. 
<html>
    <head>
        <link rel="stylesheet" href="bullshit">
    </head>
    <body>
        <h1>This is a test page</h1>
    </body>
</html>

This will result in the following error:
org.springframework.web.method.annotation. MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang. String' to required type 'java.util. UUID'; nested exception is java.lang. IllegalArgumentException: Invalid UUID string: bullshit
2018-02-22 03:49:23.062  WARN 252700 --- [nio-8080-exec-5] .m.m.a. ExceptionHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.web.method.annotation. MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang. String' to required type 'java.util. UUID'; nested exception is java.lang. IllegalArgumentException: Invalid UUID string: bullshit
    at org.springframework.web.method.annotation. AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:128)
    at org.springframework.web.method.support. HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
    at org.springframework.web.method.support. InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:160)
    at org.springframework.web.method.support. InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129)
    at org.springframework.web.servlet.mvc.method.annotation. ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
    at org.springframework.web.servlet.mvc.method.annotation. RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
    at org.springframework.web.servlet.mvc.method.annotation. RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
    at org.springframework.web.servlet.mvc.method. AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet. DispatcherServlet.doDispatch(DispatcherServlet.java:963)
    at org.springframework.web.servlet. DispatcherServlet.doService(DispatcherServlet.java:897)
    at org.springframework.web.servlet. FrameworkServlet.processRequest(FrameworkServlet.java:970)
    at org.springframework.web.servlet. FrameworkServlet.doGet(FrameworkServlet.java:861)
    at javax.servlet.http. HttpServlet.service(HttpServlet.java:622)
    at org.springframework.web.servlet. FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http. HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core. ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
    at org.apache.catalina.core. ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.tomcat.websocket.server. WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core. ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core. ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.springframework.security.web. FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
    at org.springframework.security.web.access.intercept. FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
    at org.springframework.security.web.access.intercept. FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
    at org.springframework.security.web. FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.access. ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)
    at org.springframework.security.web. FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.session. SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
    at org.springframework.security.web. FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.authentication. AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
    at org.springframework.security.web. FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.servletapi. SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169)
    at org.springframework.security.web. FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.savedrequest. RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
    at org.springframework.security.web. FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.authentication. AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
    at org.springframework.security.web. FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.authentication.logout. LogoutFilter.doFilter(LogoutFilter.java:121)
    at org.springframework.security.web. FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.header. HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66)
    at org.springframework.web.filter. OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.security.web. FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.context. SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
    at org.springframework.security.web. FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.context.request.async. WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
    at org.springframework.web.filter. OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.security.web. FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web. FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
    at org.springframework.security.web. FilterChainProxy.doFilter(FilterChainProxy.java:177)
    at org.springframework.web.filter. DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    at org.springframework.web.filter. DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
    at org.apache.catalina.core. ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core. ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.springframework.web.filter. RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
    at org.springframework.web.filter. OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core. ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core. ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.springframework.web.filter. HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:89)
    at org.springframework.web.filter. OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core. ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core. ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.springframework.web.filter. HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
    at org.springframework.web.filter. OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core. ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core. ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.springframework.web.filter. CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
    at org.springframework.web.filter. OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core. ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core. ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.catalina.core. StandardWrapperValve.invoke(StandardWrapperValve.java:198)
    at org.apache.catalina.core. StandardContextValve.invoke(StandardContextValve.java:108)
    at org.apache.catalina.authenticator. AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core. StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves. ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.core. StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector. CoyoteAdapter.service(CoyoteAdapter.java:349)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784)
    at org.apache.coyote. AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote. AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802)
    at org.apache.tomcat.util.net. NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410)
    at org.apache.tomcat.util.net. SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent. ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent. ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads. TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang. Thread.run(Thread.java:745)
Caused by: java.lang. IllegalArgumentException: Invalid UUID string: bullshit
    at java.util. UUID.fromString(UUID.java:194)
    at org.springframework.beans.propertyeditors. UUIDEditor.setAsText(UUIDEditor.java:37)
    at org.springframework.beans. TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:468)
    at org.springframework.beans. TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:441)
    at org.springframework.beans. TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:199)
    at org.springframework.beans. TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:108)
    at org.springframework.beans. TypeConverterSupport.doConvert(TypeConverterSupport.java:64)
    at org.springframework.beans. TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:47)
    at org.springframework.validation. DataBinder.convertIfNecessary(DataBinder.java:713)
    at org.springframework.web.method.annotation. AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:120)
    ... 83 more

test.html - I will NOT get an error if I am using an valid css file
<html>
    <head>
        <link rel="stylesheet" href="/path/valid.css">
    </head>
    <body>
        <h1>This is a test page</h1>
    </body>
</html>

Controller.java - If the UUID is followed by a slash / and an invalid CSS file, then I won't get any error. 
@GetMapping("/test/{id1}/")
public String testMethod(@PathVariable UUID id1){
    return "test";
}

Request:
/test/b74adb59-af60-423e-a3dd-c2f356114b51/

<html>
    <head>
        <link rel="stylesheet" href="bullshit">
    </head>
    <body>
        <h1>This is a test page</h1>
    </body>
</html>

I seems like the invalid CSS leaks into the second UUID.  I know that I can simply solve this problem by not using invalid CSS path, but I am dying to understand why I am getting this kind of error. 
EDIT:
I have created a simple test application to showcase the error.  This might make it easier for you to tinker with it.  Run the project as a Spring Boot Application and visit localhost:8080 - Remember to pay attention to your console. 
https://github.com/kkflf/SpringBootUuidWarning

A:

This is caused by using a relative stylesheet URL href="bullshit".  Browser will resolve it using the website URL with the key difference being the trailing / character.  
For http://localhost/test/b74adb59-af60-423e-a3dd-c2f356114b51 the browser will request http://localhost/test/bullshit hitting the @GetMapping in your @Controller.  This will result in Spring failing to convert bullshit String to a valid UUID and an IllegalArgumentException will be thrown. 
For http://localhost/test/b74adb59-af60-423e-a3dd-c2f356114b51/ the browser will request http://localhost/test/b74adb59-af60-423e-a3dd-c2f356114b51/bullshit which will be handled by ResourceHttpRequestHandler and 404 will be returned since there is no test/b74adb59-af60-423e-a3dd-c2f356114b51/bullshit resource.  During startup Spring Boot logs that /** URLs are mapped to ResourceHttpRequestHandler.