Fix IllegalStateException in empty ProducesRequestCondition
When comparing empty ProducesRequestCondition, compareTo would throw an IllegalStateException if the Accept header was invalid. This commit fixes that behavior. Closes gh-29794
This commit is contained in:
parent
64de6de725
commit
9ebd1e8d64
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2022 the original author or authors.
|
* Copyright 2002-2023 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -248,6 +248,9 @@ public final class ProducesRequestCondition extends AbstractRequestCondition<Pro
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(ProducesRequestCondition other, ServerWebExchange exchange) {
|
public int compareTo(ProducesRequestCondition other, ServerWebExchange exchange) {
|
||||||
|
if (this.expressions.isEmpty() && other.expressions.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
List<MediaType> acceptedMediaTypes = getAcceptedMediaTypes(exchange);
|
List<MediaType> acceptedMediaTypes = getAcceptedMediaTypes(exchange);
|
||||||
for (MediaType acceptedMediaType : acceptedMediaTypes) {
|
for (MediaType acceptedMediaType : acceptedMediaTypes) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2022 the original author or authors.
|
* Copyright 2002-2023 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -297,6 +297,18 @@ public class ProducesRequestConditionTests {
|
||||||
assertThat(result > 0).as("Should have used MediaType.equals(Object) to break the match").isTrue();
|
assertThat(result > 0).as("Should have used MediaType.equals(Object) to break the match").isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void compareEmptyInvalidAccept() {
|
||||||
|
MockServerWebExchange exchange = MockServerWebExchange.from(get("/").header("Accept", "foo"));
|
||||||
|
|
||||||
|
ProducesRequestCondition condition1 = new ProducesRequestCondition();
|
||||||
|
ProducesRequestCondition condition2 = new ProducesRequestCondition();
|
||||||
|
|
||||||
|
int result = condition1.compareTo(condition2, exchange);
|
||||||
|
assertThat(result).isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void combine() {
|
public void combine() {
|
||||||
ProducesRequestCondition condition1 = new ProducesRequestCondition("text/plain");
|
ProducesRequestCondition condition1 = new ProducesRequestCondition("text/plain");
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2022 the original author or authors.
|
* Copyright 2002-2023 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -254,6 +254,9 @@ public final class ProducesRequestCondition extends AbstractRequestCondition<Pro
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(ProducesRequestCondition other, HttpServletRequest request) {
|
public int compareTo(ProducesRequestCondition other, HttpServletRequest request) {
|
||||||
|
if (this.expressions.isEmpty() && other.expressions.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
List<MediaType> acceptedMediaTypes = getAcceptedMediaTypes(request);
|
List<MediaType> acceptedMediaTypes = getAcceptedMediaTypes(request);
|
||||||
for (MediaType acceptedMediaType : acceptedMediaTypes) {
|
for (MediaType acceptedMediaType : acceptedMediaTypes) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2022 the original author or authors.
|
* Copyright 2002-2023 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -309,6 +309,17 @@ public class ProducesRequestConditionTests {
|
||||||
assertThat(result > 0).as("Should have used MediaType.equals(Object) to break the match").isTrue();
|
assertThat(result > 0).as("Should have used MediaType.equals(Object) to break the match").isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void compareEmptyInvalidAccept() {
|
||||||
|
HttpServletRequest request = createRequest("foo");
|
||||||
|
|
||||||
|
ProducesRequestCondition condition1 = new ProducesRequestCondition();
|
||||||
|
ProducesRequestCondition condition2 = new ProducesRequestCondition();
|
||||||
|
|
||||||
|
int result = condition1.compareTo(condition2, request);
|
||||||
|
assertThat(result).isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void combine() {
|
public void combine() {
|
||||||
ProducesRequestCondition condition1 = new ProducesRequestCondition("text/plain");
|
ProducesRequestCondition condition1 = new ProducesRequestCondition("text/plain");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue