管理端点在不同端口上服务时抛出 GroovyCastException

management endpoints throwing GroovyCastException when served on different port

我的 application.yml 文件中有以下健康管理端点

management:
  endpoints:
    health:
      sensitive: false
    web:
      base-path: /
        

我有一个拦截器,代码如下

class TestInterceptor {

  TestInterceptor() {
    matchAll()
  }

  boolean before() {
    if (request.forwardURI?.endsWith('.json')) {
      // ... some code
      return false
    }
    true
  }
}

效果很好。该应用程序正在 8080 上工作。

但是一旦我更改了管理端点的端口(以便在不同的端口上进行健康检查),下面的代码

management:
  server:
    port: 8989
  endpoints:
    health:
      sensitive: false
    web:
      base-path: /

参考号https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/html/production-ready-monitoring.html

然后应用程序在拦截器中访问请求对象时抛出强制转换异常

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'Request(GET //localhost:8989/testApp/health)@68117e64' with class 'org.springframework.web.context.request.ServletRequestAttributes' to class 'org.grails.web.servlet.mvc.GrailsWebRequest'

任何解决问题的建议。

(Grails 4.0.12,Groovy 2.5.14 和 Java 11)

升级到 Grails 5。以上功能可以正常工作。