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

cc.shacocloud.mirage.web.http.HttpMessageConverter 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.util.List;

/**
 * 策略接口,指定可以在HTTP请求和响应之间进行转换的转换器
 */
public interface HttpMessageConverter {

    /**
     * 返回此转换器支持的{@link MediaType}对象的列表
     *
     * @return 支持的媒体类型列表,是不可变的副本
     */
    List getSupportedMediaTypes();

    /**
     * 指示此转换器是否可以读取给定的类
     *
     * @param parameter {@link MethodParameter}
     * @param clazz     可读的类
     * @param mediaType 要读取的媒体类型(如果未指定,可以为{@code null}); 通常是{@code Content-Type}标头的值。
     * @return {@code true}(如果可读); {@code false}否则
     */
    boolean canRead(MethodParameter parameter, Class clazz, @Nullable MediaType mediaType);

    /**
     * 从给定的输入消息中读取给定类型的对象,并将其返回。
     *
     * @return 包裹在 {@link Future} 中的结果对象
     */
    Future read(MethodParameter parameter, Class clazz, HttpRequest request);

    /**
     * 指示给定的类是否可以由此转换器编写
     *
     * @param clazz     测试可写性的类
     * @param mediaType 要写入的媒体类型(如果未指定,可以为{@code null}); 通常是{@code Accept}标头的值。
     * @return {@code true}(如果可读); {@code false}否则
     */
    boolean canWrite(Class clazz, @Nullable MediaType mediaType);


    /**
     * 将给定对象写入给定输出消息
     *
     * @param t           写入输出消息的对象。 该对象的类型必须先前已传递给此接口的{@link #canWrite canWrite}方法,该方法必须返回{@code true}。
     * @param contentType 编写时使用的内容类型。可能为{@code null},以指示必须使用转换器的默认内容类型。
     *                    如果不是{@code null},则此媒体类型必须先前已传递给此接口的{@link #canWrite canWrite}方法,
     *                    该方法必须返回了{@code true}。
     * @param response    响应对象
     * @return {@link Future} 解析后的结果
     */
    Future write(T t, @Nullable MediaType contentType, HttpResponse response);


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy