/*
* Copyright (c) 2011-2013 The original author or authors
* ------------------------------------------------------
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Apache License v2.0 is available at
* http://www.opensource.org/licenses/apache2.0.php
*
* You may elect to redistribute this code under either of these licenses.
*/
package io.vertx.ext.web.codec;
import io.vertx.codegen.annotations.GenIgnore;
import io.vertx.codegen.annotations.VertxGen;
import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.core.streams.WriteStream;
import io.vertx.ext.web.codec.impl.BodyCodecImpl;
import io.vertx.ext.web.codec.impl.StreamingBodyCodec;
import io.vertx.ext.web.codec.spi.BodyStream;
import java.util.function.Function;
A codec for encoding and decoding HTTP bodies.
Author: Julien Viet
/**
* A codec for encoding and decoding HTTP bodies.
*
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
@VertxGen
public interface BodyCodec<T> {
Returns: the UTF-8 string codec
/**
* @return the UTF-8 string codec
*/
static BodyCodec<String> string() {
return BodyCodecImpl.STRING;
}
A codec for strings using a specific encoding
. Params: - encoding – the encoding
Returns: the codec
/**
* A codec for strings using a specific {@code encoding}.
*
* @param encoding the encoding
* @return the codec
*/
static BodyCodec<String> string(String encoding) {
return BodyCodecImpl.string(encoding);
}
Returns: the Buffer
codec
/**
* @return the {@link Buffer} codec
*/
static BodyCodec<Buffer> buffer() {
return BodyCodecImpl.BUFFER;
}
Returns: the JsonObject
codec
/**
* @return the {@link JsonObject} codec
*/
static BodyCodec<JsonObject> jsonObject() {
return BodyCodecImpl.JSON_OBJECT;
}
Returns: the JsonArray
codec
/**
* @return the {@link JsonArray} codec
*/
static BodyCodec<JsonArray> jsonArray() {
return BodyCodecImpl.JSON_ARRAY;
}
Create and return a codec for Java objects encoded using Jackson mapper.
Returns: a codec for mapping POJO to Json
/**
* Create and return a codec for Java objects encoded using Jackson mapper.
*
* @return a codec for mapping POJO to Json
*/
static <U> BodyCodec<U> json(Class<U> type) {
return BodyCodecImpl.json(type);
}
Returns: a codec that simply discards the response
/**
* @return a codec that simply discards the response
*/
static BodyCodec<Void> none() {
return BodyCodecImpl.NONE;
}
Create a codec that buffers the entire body and then apply the decode
function and returns the result. Params: - decode – the decode function
Returns: the created codec
/**
* Create a codec that buffers the entire body and then apply the {@code decode} function and returns the result.
*
* @param decode the decode function
* @return the created codec
*/
static <T> BodyCodec<T> create(Function<Buffer, T> decode) {
return new BodyCodecImpl<>(decode);
}
A body codec that pipes the body to a write stream.
Same as pipe(stream, true).
Params: - stream – the destination tream
Returns: the body codec for a write stream
/**
* A body codec that pipes the body to a write stream.
* <p></p>
* Same as pipe(stream, true).
*
* @param stream the destination tream
* @return the body codec for a write stream
*/
static BodyCodec<Void> pipe(WriteStream<Buffer> stream) {
return pipe(stream, true);
}
A body codec that pipes the body to a write stream.
Params: - stream – the destination stream
- close – whether the destination stream should be closed
Returns: the body codec for a write stream
/**
* A body codec that pipes the body to a write stream.
*
* @param stream the destination stream
* @param close whether the destination stream should be closed
* @return the body codec for a write stream
*/
static BodyCodec<Void> pipe(WriteStream<Buffer> stream, boolean close) {
return new StreamingBodyCodec(stream, close);
}
Create the BodyStream
.
This method is usually called for creating the pump for the HTTP response and should not be called directly.
/**
* Create the {@link BodyStream}.
* <p>
* This method is usually called for creating the pump for the HTTP response and should not be called directly.
*/
@GenIgnore
void create(Handler<AsyncResult<BodyStream<T>>> handler);
}