Skip to content

Commit e340429

Browse files
committed
Merge branch '2.5.x'
Closes spring-projectsgh-28469
2 parents ea8a8ec + b375f9f commit e340429

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ProducibleOperationArgumentResolver.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ private Enum<? extends Producible<?>> resolveProducible(Class<Enum<? extends Pro
6565
Enum<? extends Producible<?>> result = null;
6666
for (String accept : accepts) {
6767
for (String mimeType : MimeTypeUtils.tokenize(accept)) {
68-
result = mostRecent(result, forMimeType(values, mimeType));
68+
result = mostRecent(result, forMimeType(values, MimeTypeUtils.parseMimeType(mimeType)));
6969
}
7070
}
7171
return result;
@@ -78,14 +78,10 @@ private Enum<? extends Producible<?>> mostRecent(Enum<? extends Producible<?>> e
7878
return (candidateOrdinal > existingOrdinal) ? candidate : existing;
7979
}
8080

81-
private Enum<? extends Producible<?>> forMimeType(List<Enum<? extends Producible<?>>> values, String mimeType) {
82-
if ("*/*".equals(mimeType)) {
81+
private Enum<? extends Producible<?>> forMimeType(List<Enum<? extends Producible<?>>> values, MimeType mimeType) {
82+
if (mimeType.isWildcardType() && mimeType.isWildcardSubtype()) {
8383
return getDefaultValue(values);
8484
}
85-
return forMimeType(values, MimeTypeUtils.parseMimeType(mimeType));
86-
}
87-
88-
private Enum<? extends Producible<?>> forMimeType(List<Enum<? extends Producible<?>>> values, MimeType mimeType) {
8985
for (Enum<? extends Producible<?>> candidate : values) {
9086
if (mimeType.isCompatibleWith(((Producible<?>) candidate).getProducedMimeType())) {
9187
return candidate;

spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/export/prometheus/PrometheusScrapeEndpointIntegrationTests.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,25 @@ class PrometheusScrapeEndpointIntegrationTests {
4141

4242
@WebEndpointTest
4343
void scrapeHasContentTypeText004ByDefault(WebTestClient client) {
44+
String expectedContentType = TextFormat.CONTENT_TYPE_004;
45+
assertThat(TextFormat.chooseContentType(null)).isEqualTo(expectedContentType);
4446
client.get().uri("/actuator/prometheus").exchange().expectStatus().isOk().expectHeader()
45-
.contentType(MediaType.parseMediaType(TextFormat.CONTENT_TYPE_004)).expectBody(String.class)
47+
.contentType(MediaType.parseMediaType(expectedContentType)).expectBody(String.class)
4648
.value((body) -> assertThat(body).contains("counter1_total").contains("counter2_total")
4749
.contains("counter3_total"));
4850
}
4951

52+
@WebEndpointTest
53+
void scrapeHasContentTypeText004ByDefaultWhenClientAcceptsWildcardWithParameter(WebTestClient client) {
54+
String expectedContentType = TextFormat.CONTENT_TYPE_004;
55+
String accept = "*/*;q=0.8";
56+
assertThat(TextFormat.chooseContentType(accept)).isEqualTo(expectedContentType);
57+
client.get().uri("/actuator/prometheus").accept(MediaType.parseMediaType(accept)).exchange().expectStatus()
58+
.isOk().expectHeader().contentType(MediaType.parseMediaType(expectedContentType))
59+
.expectBody(String.class).value((body) -> assertThat(body).contains("counter1_total")
60+
.contains("counter2_total").contains("counter3_total"));
61+
}
62+
5063
@WebEndpointTest
5164
void scrapeCanProduceOpenMetrics100(WebTestClient client) {
5265
MediaType openMetrics = MediaType.parseMediaType(TextFormat.CONTENT_TYPE_OPENMETRICS_100);

0 commit comments

Comments
 (0)