All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cc.shacocloud.mirage.web.http.GenericHttpMessageConverter Maven / Gradle / Ivy

package cc.shacocloud.mirage.web.http;

import cc.shacocloud.mirage.web.HttpResponse;
import cc.shacocloud.mirage.web.HttpRequest;
import io.vertx.core.Future;
import io.vertx.core.buffer.Buffer;
import org.springframework.core.MethodParameter;
import org.jetbrains.annotations.Nullable;

import java.lang.reflect.Type;

/**
 * HttpMessageConverter 的一种通用化,它可以将HTTP请求转换为指定泛型类型的目标对象,并将指定泛型类型的源对象转换为HTTP响应。
 */
public interface GenericHttpMessageConverter extends HttpMessageConverter {

    /**
     * 指示此转换器是否可以读取给定的类型。
     * 这个方法应该执行与{@link HttpMessageConverter#canRead(org.springframework.core.MethodParameter, Class, MediaType)}相同的检查,另外还有一些与泛型类型相关的检查。
     *
     * @param parameter    {@link MethodParameter}
     * @param type         用于测试可读性的(可能是泛型的)类型
     * @param contextClass 目标类型的上下文类,例如目标类型出现在方法签名中的类(可以是{@code null})
     * @param mediaType    要读取的媒体类型,如果没有指定,可以是{@code null}。通常是{@code Content-Type}头的值。
     * @return {@code true}如果可读;{@code false}
     */
    boolean canRead(MethodParameter parameter, Type type, @Nullable Class contextClass, @Nullable MediaType mediaType);

    /**
     * 从给定输入消息中读取给定类型的对象,并返回该对象。
     *
     * @param parameter    {@link MethodParameter }
     * @param type         用于测试可读性的(可能是泛型的)类型
     * @param contextClass 目标类型的上下文类,例如目标类型出现在方法签名中的类(可以是{@code null})
     * @param request      当前请求对象
     * @return 转换对象
     */
    Future read(MethodParameter parameter, Type type, @Nullable Class contextClass, HttpRequest request);

    /**
     * 指示给定的类是否可以由此转换器编写。
     * 

* 此方法应该执行与 {@link HttpMessageConverter#canWrite(Class, MediaType)}相同的检查,另外还有与泛型类型相关的检查。 * * @param type 测试可写性的(可能是通用的)类型(如果没有指定,可以是{@code null}) * @param clazz 用于测试可写性的源对象类 * @param mediaType 要写入的媒体类型(如果没有指定,可以是{@code null});通常是{@code Accept}头的值。 * @return {@code true}如果可写;{@code false} */ boolean canWrite(@Nullable Type type, Class clazz, @Nullable MediaType mediaType); /** * 将给定的对象写入给定的输出消息。 * * @param t 要写入输出消息的对象。该对象的类型之前必须被传递给该接口的{@link #canWrite canWrite}方法, * 该方法必须返回{@code true}。 * @param type 要写入的(可能是泛型的)对象类型。该类型之前必须已被传递给该接口的{@link #canWrite canWrite}方法, * 该方法必须返回{@code true}。如果没有指定,可以是{@code null}。 * @param contentType 写作时要使用的内容类型。 * 可能是{@code null} 表示必须使用转换器的默认内容类型。 * 如果不是{@code null},则该媒体类型必须之前已被传递给该接口的 * {@link #canWrite canWrite}方法,该方法必须返回* {@code true}。 * @param response 响应体 * @return {@link Future} 解析后的结果 */ Future write(T t, @Nullable Type type, @Nullable MediaType contentType, HttpResponse response); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy