|
@@ -0,0 +1,99 @@
|
|
|
+/*
|
|
|
+ * Copyright 2004-present 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.security.oauth2.core.http.converter;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.lang.reflect.Type;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+import org.jspecify.annotations.Nullable;
|
|
|
+
|
|
|
+import org.springframework.core.ResolvableType;
|
|
|
+import org.springframework.http.HttpInputMessage;
|
|
|
+import org.springframework.http.HttpOutputMessage;
|
|
|
+import org.springframework.http.MediaType;
|
|
|
+import org.springframework.http.converter.GenericHttpMessageConverter;
|
|
|
+import org.springframework.http.converter.HttpMessageNotReadableException;
|
|
|
+import org.springframework.http.converter.HttpMessageNotWritableException;
|
|
|
+import org.springframework.http.converter.SmartHttpMessageConverter;
|
|
|
+
|
|
|
+/**
|
|
|
+ * {@link GenericHttpMessageConverter} implementation that delegates to a
|
|
|
+ * {@link SmartHttpMessageConverter}.
|
|
|
+ *
|
|
|
+ * @param <T> the converted object type
|
|
|
+ * @author Sebastien Deleuze
|
|
|
+ * @since 7.0
|
|
|
+ */
|
|
|
+public class GenericHttpMessageConverterAdapter<T> implements GenericHttpMessageConverter<T> {
|
|
|
+
|
|
|
+ private final SmartHttpMessageConverter<T> smartConverter;
|
|
|
+
|
|
|
+ public GenericHttpMessageConverterAdapter(SmartHttpMessageConverter<T> smartConverter) {
|
|
|
+ this.smartConverter = smartConverter;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean canRead(Type type, @Nullable Class<?> contextClass, @Nullable MediaType mediaType) {
|
|
|
+ return this.smartConverter.canRead(ResolvableType.forType(type), mediaType);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public T read(Type type, @Nullable Class<?> contextClass, HttpInputMessage inputMessage)
|
|
|
+ throws IOException, HttpMessageNotReadableException {
|
|
|
+ return this.smartConverter.read(ResolvableType.forType(type), inputMessage, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean canWrite(@Nullable Type type, Class<?> clazz, @Nullable MediaType mediaType) {
|
|
|
+ return this.smartConverter.canWrite(ResolvableType.forType(type), clazz, mediaType);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void write(T t, @Nullable Type type, @Nullable MediaType contentType, HttpOutputMessage outputMessage)
|
|
|
+ throws IOException, HttpMessageNotWritableException {
|
|
|
+ this.smartConverter.write(t, ResolvableType.forType(type), contentType, outputMessage, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean canRead(Class<?> clazz, @Nullable MediaType mediaType) {
|
|
|
+ return this.smartConverter.canRead(ResolvableType.forClass(clazz), mediaType);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType) {
|
|
|
+ return this.smartConverter.canWrite(clazz, mediaType);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<MediaType> getSupportedMediaTypes() {
|
|
|
+ return this.smartConverter.getSupportedMediaTypes();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public T read(Class<? extends T> clazz, HttpInputMessage inputMessage)
|
|
|
+ throws IOException, HttpMessageNotReadableException {
|
|
|
+ return this.smartConverter.read(clazz, inputMessage);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void write(T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage)
|
|
|
+ throws IOException, HttpMessageNotWritableException {
|
|
|
+ this.smartConverter.write(t, contentType, outputMessage);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|