【发布时间】:2025-12-05 05:20:07
【问题描述】:
我正在为我的 springboot 应用程序实现一个 HealthIndicator,它会 ping Jenkins 实例以检查它们是否启动。我通过 ping ${JENKINS_URL}/login 来做到这一点。如果它出现了,我会收到 200 个响应。如果它没有启动,我会得到一个非常丑陋的堆栈跟踪,如下所示:
org.springframework.http.InvalidMediaTypeException: Invalid mime type "html": does not contain '/'
at org.springframework.http.MediaType.parseMediaType(MediaType.java:574) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.http.HttpHeaders.getContentType(HttpHeaders.java:966) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.DefaultResponseErrorHandler.getCharset(DefaultResponseErrorHandler.java:224) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:165) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:112) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:785) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:743) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:677) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:345) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at com.path.to.package.JenkinsCache.pingJenkins(JenkinsCache.java:60) [classes/:na]
我的驱动程序代码如下所示(JenkinsCache):
private String pingJenkins(String jenkinsEndpoint) {
RestTemplate restTemplate = new RestTemplate();
try{
restTemplate.getForEntity(jenkinsEndpoint+"/login", String.class);
return "OK";
} catch (Exception e) {
log.error("An error occurred while pinging: "+jenkinsEndpoint, e);
}
return "DOWN";
}
我宁愿捕获一个特定的异常,但如果 ping 一个关闭的 Jenkins 实例会产生一个 InvalidMediaTypeException,它看起来有点令人困惑(即我希望像 RestClientException 这样的东西)。什么是捕获/处理此异常的好方法?我应该改用RuntimeException 吗?
【问题讨论】:
标签: java spring-boot exception spring-boot-actuator