Remove APIs deprecated for removal in 6.2
This commit removes the following obsolete and deprecated APIs. - org.springframework.util.Base64Utils - org.springframework.cache.jcache.interceptor.JCacheOperationSourcePointcut - org.springframework.http.client.AbstractClientHttpResponse - org.springframework.http.client.ClientHttpResponse.getRawStatusCode() - org.springframework.http.client.observation.ClientHttpObservationDocumentation.HighCardinalityKeyNames.CLIENT_NAME - org.springframework.web.reactive.function.client.ClientHttpObservationDocumentation.HighCardinalityKeyNames.CLIENT_NAME - org.springframework.web.filter.reactive.ServerWebExchangeContextFilter.get(Context) - org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler.handleBindException(...) - org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleBindException(...) Closes gh-30608
This commit is contained in:
parent
6d5bf6d9b3
commit
a85bf3185e
|
|
@ -1,68 +0,0 @@
|
|||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.cache.jcache.interceptor;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import org.springframework.aop.support.StaticMethodMatcherPointcut;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
/**
|
||||
* A Pointcut that matches if the underlying {@link JCacheOperationSource}
|
||||
* has an operation for a given method.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
* @since 4.1
|
||||
* @deprecated since 6.0.10, as it is not used by the framework anymore
|
||||
*/
|
||||
@Deprecated(since = "6.0.10", forRemoval = true)
|
||||
@SuppressWarnings("serial")
|
||||
public abstract class JCacheOperationSourcePointcut extends StaticMethodMatcherPointcut implements Serializable {
|
||||
|
||||
@Override
|
||||
public boolean matches(Method method, Class<?> targetClass) {
|
||||
JCacheOperationSource cas = getCacheOperationSource();
|
||||
return (cas != null && cas.getCacheOperation(method, targetClass) != null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtain the underlying {@link JCacheOperationSource} (may be {@code null}).
|
||||
* To be implemented by subclasses.
|
||||
*/
|
||||
@Nullable
|
||||
protected abstract JCacheOperationSource getCacheOperationSource();
|
||||
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object other) {
|
||||
return (this == other || (other instanceof JCacheOperationSourcePointcut that &&
|
||||
ObjectUtils.nullSafeEquals(getCacheOperationSource(), that.getCacheOperationSource())));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return JCacheOperationSourcePointcut.class.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getClass().getName() + ": " + getCacheOperationSource();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,132 +0,0 @@
|
|||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.util;
|
||||
|
||||
import java.util.Base64;
|
||||
|
||||
/**
|
||||
* A simple utility class for Base64 encoding and decoding.
|
||||
*
|
||||
* <p>Adapts to Java 8's {@link java.util.Base64} in a convenience fashion.
|
||||
*
|
||||
* @author Juergen Hoeller
|
||||
* @author Gary Russell
|
||||
* @since 4.1
|
||||
* @see java.util.Base64
|
||||
* @deprecated as of Spring Framework 6.0.5 in favor of {@link Base64}; scheduled
|
||||
* for removal in 6.2
|
||||
*/
|
||||
@Deprecated(since = "6.0.5", forRemoval = true)
|
||||
public abstract class Base64Utils {
|
||||
|
||||
/**
|
||||
* Base64-encode the given byte array.
|
||||
* @param src the original byte array
|
||||
* @return the encoded byte array
|
||||
*/
|
||||
public static byte[] encode(byte[] src) {
|
||||
if (src.length == 0) {
|
||||
return src;
|
||||
}
|
||||
return Base64.getEncoder().encode(src);
|
||||
}
|
||||
|
||||
/**
|
||||
* Base64-decode the given byte array.
|
||||
* @param src the encoded byte array
|
||||
* @return the original byte array
|
||||
*/
|
||||
public static byte[] decode(byte[] src) {
|
||||
if (src.length == 0) {
|
||||
return src;
|
||||
}
|
||||
return Base64.getDecoder().decode(src);
|
||||
}
|
||||
|
||||
/**
|
||||
* Base64-encode the given byte array using the RFC 4648
|
||||
* "URL and Filename Safe Alphabet".
|
||||
* @param src the original byte array
|
||||
* @return the encoded byte array
|
||||
* @since 4.2.4
|
||||
*/
|
||||
public static byte[] encodeUrlSafe(byte[] src) {
|
||||
if (src.length == 0) {
|
||||
return src;
|
||||
}
|
||||
return Base64.getUrlEncoder().encode(src);
|
||||
}
|
||||
|
||||
/**
|
||||
* Base64-decode the given byte array using the RFC 4648
|
||||
* "URL and Filename Safe Alphabet".
|
||||
* @param src the encoded byte array
|
||||
* @return the original byte array
|
||||
* @since 4.2.4
|
||||
*/
|
||||
public static byte[] decodeUrlSafe(byte[] src) {
|
||||
if (src.length == 0) {
|
||||
return src;
|
||||
}
|
||||
return Base64.getUrlDecoder().decode(src);
|
||||
}
|
||||
|
||||
/**
|
||||
* Base64-encode the given byte array to a String.
|
||||
* @param src the original byte array
|
||||
* @return the encoded byte array as a UTF-8 String
|
||||
*/
|
||||
public static String encodeToString(byte[] src) {
|
||||
if (src.length == 0) {
|
||||
return "";
|
||||
}
|
||||
return Base64.getEncoder().encodeToString(src);
|
||||
}
|
||||
|
||||
/**
|
||||
* Base64-decode the given byte array from a UTF-8 String.
|
||||
* @param src the encoded UTF-8 String
|
||||
* @return the original byte array
|
||||
*/
|
||||
public static byte[] decodeFromString(String src) {
|
||||
if (src.isEmpty()) {
|
||||
return new byte[0];
|
||||
}
|
||||
return Base64.getDecoder().decode(src);
|
||||
}
|
||||
|
||||
/**
|
||||
* Base64-encode the given byte array to a String using the RFC 4648
|
||||
* "URL and Filename Safe Alphabet".
|
||||
* @param src the original byte array
|
||||
* @return the encoded byte array as a UTF-8 String
|
||||
*/
|
||||
public static String encodeToUrlSafeString(byte[] src) {
|
||||
return Base64.getUrlEncoder().encodeToString(src);
|
||||
}
|
||||
|
||||
/**
|
||||
* Base64-decode the given byte array from a UTF-8 String using the RFC 4648
|
||||
* "URL and Filename Safe Alphabet".
|
||||
* @param src the encoded UTF-8 String
|
||||
* @return the original byte array
|
||||
*/
|
||||
public static byte[] decodeFromUrlSafeString(String src) {
|
||||
return Base64.getUrlDecoder().decode(src);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.http.client;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.springframework.http.HttpStatusCode;
|
||||
|
||||
/**
|
||||
* Abstract base for {@link ClientHttpResponse}.
|
||||
*
|
||||
* @author Arjen Poutsma
|
||||
* @since 3.1.1
|
||||
* @deprecated as of 6.0, with no direct replacement; scheduled for removal in 6.2
|
||||
*/
|
||||
@Deprecated(since = "6.0", forRemoval = true)
|
||||
public abstract class AbstractClientHttpResponse implements ClientHttpResponse {
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("removal")
|
||||
public HttpStatusCode getStatusCode() throws IOException {
|
||||
return HttpStatusCode.valueOf(getRawStatusCode());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -42,20 +42,6 @@ public interface ClientHttpResponse extends HttpInputMessage, Closeable {
|
|||
*/
|
||||
HttpStatusCode getStatusCode() throws IOException;
|
||||
|
||||
/**
|
||||
* Get the HTTP status code as an integer.
|
||||
* @return the HTTP status as an integer value
|
||||
* @throws IOException in case of I/O errors
|
||||
* @since 3.1.1
|
||||
* @see #getStatusCode()
|
||||
* @deprecated as of 6.0, in favor of {@link #getStatusCode()}; scheduled for
|
||||
* removal in 6.2
|
||||
*/
|
||||
@Deprecated(since = "6.0", forRemoval = true)
|
||||
default int getRawStatusCode() throws IOException {
|
||||
return getStatusCode().value();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the HTTP status text of the response.
|
||||
* @return the HTTP status text
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -135,20 +135,6 @@ public enum ClientHttpObservationDocumentation implements ObservationDocumentati
|
|||
public String asString() {
|
||||
return "http.url";
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Client name derived from the request URI host.
|
||||
* @deprecated in favor of {@link LowCardinalityKeyNames#CLIENT_NAME};
|
||||
* scheduled for removal in 6.2. This will be available both as a low and
|
||||
* high cardinality key value.
|
||||
*/
|
||||
@Deprecated(since = "6.0.5", forRemoval = true)
|
||||
CLIENT_NAME {
|
||||
@Override
|
||||
public String asString() {
|
||||
return "client.name";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -64,19 +64,4 @@ public class ServerWebExchangeContextFilter implements WebFilter {
|
|||
return contextView.getOrEmpty(EXCHANGE_CONTEXT_ATTRIBUTE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Access the {@link ServerWebExchange} from a Reactor {@link Context},
|
||||
* if available, which is generally the case when
|
||||
* {@link ServerWebExchangeContextFilter} is present in the filter chain.
|
||||
* @param context the context to get the exchange from
|
||||
* @return an {@link Optional} with the exchange if found
|
||||
* @deprecated in favor of using {@link #getExchange(ContextView)} which
|
||||
* accepts a {@link ContextView} instead of {@link Context}, reflecting the
|
||||
* fact that the {@code ContextView} is needed only for reading.
|
||||
*/
|
||||
@Deprecated(since = "6.0.6", forRemoval = true)
|
||||
public static Optional<ServerWebExchange> get(Context context) {
|
||||
return context.getOrEmpty(EXCHANGE_CONTEXT_ATTRIBUTE);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -768,7 +768,6 @@ class RestTemplateTests {
|
|||
given(request.execute()).willReturn(response);
|
||||
given(errorHandler.hasError(response)).willReturn(responseStatus.isError());
|
||||
given(response.getStatusCode()).willReturn(responseStatus);
|
||||
given(response.getRawStatusCode()).willReturn(responseStatus.value());
|
||||
given(response.getStatusText()).willReturn(responseStatus.getReasonPhrase());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -132,20 +132,6 @@ public enum ClientHttpObservationDocumentation implements ObservationDocumentati
|
|||
public String asString() {
|
||||
return "http.url";
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Client name derived from the request URI host.
|
||||
* @deprecated in favor of {@link LowCardinalityKeyNames#CLIENT_NAME};
|
||||
* scheduled for removal in 6.2. This will be available both as a low and
|
||||
* high cardinality key value.
|
||||
*/
|
||||
@Deprecated(since = "6.0.5", forRemoval = true)
|
||||
CLIENT_NAME {
|
||||
@Override
|
||||
public String asString() {
|
||||
return "client.name";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -200,9 +200,6 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa
|
|||
else if (ex instanceof MethodValidationException subEx) {
|
||||
return handleMethodValidationException(subEx, headers, HttpStatus.INTERNAL_SERVER_ERROR, request);
|
||||
}
|
||||
else if (ex instanceof BindException theEx) {
|
||||
return handleBindException(theEx, headers, HttpStatus.BAD_REQUEST, request);
|
||||
}
|
||||
else {
|
||||
// Unknown exception, typically a wrapper with a common MVC exception as cause
|
||||
// (since @ExceptionHandler type declarations also match nested causes):
|
||||
|
|
@ -549,30 +546,6 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa
|
|||
return handleExceptionInternal(ex, body, headers, status, request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Customize the handling of {@link BindException}.
|
||||
* <p>By default this method creates a {@link ProblemDetail} with the status
|
||||
* and a short detail message, and then delegates to
|
||||
* {@link #handleExceptionInternal}.
|
||||
* @param ex the exception to handle
|
||||
* @param headers the headers to use for the response
|
||||
* @param status the status code to use for the response
|
||||
* @param request the current request
|
||||
* @return a {@code ResponseEntity} for the response to use, possibly
|
||||
* {@code null} when the response is already committed
|
||||
* @deprecated as of 6.0 since {@link org.springframework.web.method.annotation.ModelAttributeMethodProcessor}
|
||||
* now raises the {@link MethodArgumentNotValidException} subclass instead.
|
||||
*/
|
||||
@Nullable
|
||||
@Deprecated(since = "6.0", forRemoval = true)
|
||||
protected ResponseEntity<Object> handleBindException(
|
||||
BindException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) {
|
||||
|
||||
ProblemDetail body = ProblemDetail.forStatusAndDetail(status, "Failed to bind request");
|
||||
return handleExceptionInternal(ex, body, headers, status, request);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Customize the handling of {@link MethodValidationException}.
|
||||
* <p>By default this method creates a {@link ProblemDetail} with the status
|
||||
|
|
|
|||
|
|
@ -31,8 +31,6 @@ import org.springframework.http.ProblemDetail;
|
|||
import org.springframework.http.converter.HttpMessageNotReadableException;
|
||||
import org.springframework.http.converter.HttpMessageNotWritableException;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.validation.BindException;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.validation.method.MethodValidationException;
|
||||
import org.springframework.web.ErrorResponse;
|
||||
import org.springframework.web.HttpMediaTypeNotAcceptableException;
|
||||
|
|
@ -42,7 +40,6 @@ import org.springframework.web.bind.MethodArgumentNotValidException;
|
|||
import org.springframework.web.bind.MissingPathVariableException;
|
||||
import org.springframework.web.bind.MissingServletRequestParameterException;
|
||||
import org.springframework.web.bind.ServletRequestBindingException;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestPart;
|
||||
import org.springframework.web.context.request.async.AsyncRequestTimeoutException;
|
||||
|
|
@ -240,9 +237,6 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes
|
|||
else if (ex instanceof MethodValidationException theEx) {
|
||||
return handleMethodValidationException(theEx, request, response, handler);
|
||||
}
|
||||
else if (ex instanceof BindException theEx) {
|
||||
return handleBindException(theEx, request, response, handler);
|
||||
}
|
||||
}
|
||||
catch (Exception handlerEx) {
|
||||
if (logger.isWarnEnabled()) {
|
||||
|
|
@ -640,27 +634,6 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes
|
|||
return new ModelAndView();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the case where an {@linkplain ModelAttribute @ModelAttribute} method
|
||||
* argument has binding or validation errors and is not followed by another
|
||||
* method argument of type {@link BindingResult}.
|
||||
* <p>By default, an HTTP 400 error is sent back to the client.
|
||||
* @param request current HTTP request
|
||||
* @param response current HTTP response
|
||||
* @param handler the executed handler
|
||||
* @return an empty {@code ModelAndView} indicating the exception was handled
|
||||
* @throws IOException potentially thrown from {@link HttpServletResponse#sendError}
|
||||
* @deprecated as of 6.0 since {@link org.springframework.web.method.annotation.ModelAttributeMethodProcessor}
|
||||
* now raises the {@link MethodArgumentNotValidException} subclass instead.
|
||||
*/
|
||||
@Deprecated(since = "6.0", forRemoval = true)
|
||||
protected ModelAndView handleBindException(BindException ex, HttpServletRequest request,
|
||||
HttpServletResponse response, @Nullable Object handler) throws IOException {
|
||||
|
||||
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
|
||||
return new ModelAndView();
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoked to send a server error. Sets the status to 500 and also sets the
|
||||
* request attribute "jakarta.servlet.error.exception" to the Exception.
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ import org.springframework.http.ResponseEntity;
|
|||
import org.springframework.http.converter.HttpMessageNotReadableException;
|
||||
import org.springframework.http.converter.HttpMessageNotWritableException;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.validation.BindException;
|
||||
import org.springframework.validation.MapBindingResult;
|
||||
import org.springframework.validation.method.MethodValidationException;
|
||||
import org.springframework.validation.method.MethodValidationResult;
|
||||
|
|
@ -292,11 +291,6 @@ class ResponseEntityExceptionHandlerTests {
|
|||
testException(new MissingServletRequestPartException("partName"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void bindException() {
|
||||
testException(new BindException(new Object(), "name"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void noHandlerFoundException() {
|
||||
HttpHeaders requestHeaders = new HttpHeaders();
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ import org.springframework.http.converter.HttpMessageNotWritableException;
|
|||
import org.springframework.http.server.ServletServerHttpRequest;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.validation.BeanPropertyBindingResult;
|
||||
import org.springframework.validation.BindException;
|
||||
import org.springframework.web.HttpMediaTypeNotSupportedException;
|
||||
import org.springframework.web.HttpRequestMethodNotSupportedException;
|
||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||
|
|
@ -196,15 +195,6 @@ class DefaultHandlerExceptionResolverTests {
|
|||
assertThat(response.getErrorMessage()).contains("not present");
|
||||
}
|
||||
|
||||
@Test
|
||||
void handleBindException() {
|
||||
BindException ex = new BindException(new Object(), "name");
|
||||
ModelAndView mav = exceptionResolver.resolveException(request, response, null, ex);
|
||||
assertThat(mav).as("No ModelAndView returned").isNotNull();
|
||||
assertThat(mav.isEmpty()).as("No Empty ModelAndView returned").isTrue();
|
||||
assertThat(response.getStatus()).as("Invalid status code").isEqualTo(400);
|
||||
}
|
||||
|
||||
@Test
|
||||
void handleNoHandlerFoundException() {
|
||||
ServletServerHttpRequest req = new ServletServerHttpRequest(
|
||||
|
|
|
|||
Loading…
Reference in New Issue