Objetos suportados
Tipos suportados
Por padrão, os seguintes tipos de retorno de método são suportados:
String
public interface MyApi {
@Path("/customers/{id}") @Get
String getCustomerAsString(@PathParameter String id);
}Tipos primitivos ou
wrappers
public interface MyApi {
@Path("/integer") @Get
int integer();
@Path("/boolean") @Get
Boolean boolean();
@Path("/double") @Get
double double();
}byte[]
public interface MyApi {
@Path("/customers/{id}") @Get
byte[] getCustomerAsBytes(@PathParameter String id);
}InputStream
public interface MyApi {
@Path("/customers/{id}") @Get
InputStream getCustomerAsStream(@PathParameter String id);
}Optional
public interface MyApi {
@Path("/customers/{id}") @Get
Optional<Customer> getCustomerById(@PathParameter String id);
}Collection
public interface MyApi {
@Path("/customers") @Get
Collection<Customer> getAllCustomers();
}Stream
public interface MyApi {
@Path("/customers") @Get
Stream<Customer> getAllCustomers();
}Enumeration
public interface MyApi {
@Path("/customers") @Get
Enumeration<Customer> getAllCustomers();
}Iterator
public interface MyApi {
@Path("/customers") @Get
Iterator<Customer> getAllCustomers();
}ListIterator
public interface MyApi {
@Path("/customers") @Get
ListIterator<Customer> getAllCustomers();
}Iterable
public interface MyApi {
@Path("/customers") @Get
Iterable<Customer> getAllCustomers();
}Queue
public interface MyApi {
@Path("/customers") @Get
Queue<Customer> getAllCustomers();
}Callable
Callable é um objeto que representa uma computação qualquer que retorna algum valor. A requisição HTTP será feita de modo lazy, eventualmente em outra thread (o seu código será responsável pela execução do Callable).
public interface MyApi {
@Path("/customers/{id}") @Get
Callable<Customer> getCustomerById(@PathParameter String id);
}Runnable
Runnable é um objeto que representa uma computação qualquer, e não retorna nenhum valor. A requisição HTTP será feita de modo lazy, eventualmente em outra thread (o seu código será responsável pela execução do Runnable).
public interface MyApi {
@Path("/customers") @Post
Runnable createCustomer(@BodyParameter Customer customer);
}EndpointCall<>
Esse objeto representa uma operação HTTP realizada pelo java-restify. O seu código será responsável por invocar o método execute.
import com.github.ljtfreitas.restify.http.client.call.EndpointCall;
public interface MyApi {
@Path("/customers/{id}") @Get
EndpointCall<Customer> getCustomerById(@PathParameter String id);
}Headers
Esse objeto é uma coleção imutável de cabeçalhos. Quando utilizado como retorno de método, irá conter os headers da resposta.
import com.github.ljtfreitas.restify.http.client.message.Headers;
public interface MyApi {
@Path("/customers/{id}") @Head
Headers getCustomerById(@PathParameter String id);
}StatusCode
Esse objeto representa o status HTTP da resposta.
import com.github.ljtfreitas.restify.http.client.message.response.StatusCode;
public interface MyApi {
@Path("/customers") @Post
StatusCode createCustomer(@BodyParameter Customer customer);
}EndpointResponse<>
Esse objeto fornece acesso a todos os dados da resposta (incluindo cabeçalhos e status code). Também fornece acesso ao corpo, já deserializado para um objeto.
import com.github.ljtfreitas.restify.http.client.response.EndpointResponse;
public interface MyApi {
@Path("/customers/{id}") @Get
EndpointResponse<Customer> getCustomerById(@PathParameter String id);
}Tipos assíncronos
Alguns tipos de retorno farão com que a requisição seja executada da maneira assíncrona automaticamente. De maneira simplificada, a requisição simplesmente será realizada em uma thread separada. O mecanismo é explicado com mais detalhes na documentação sobre requisições assíncronas HTTP.
O java-restify oferece suporte para vários tipos de retorno assíncronos, e os handlers para esses objetos são registrados automaticamente. Para tornar essa configuração explícita:
MyApi myApi = new RestifyProxyBuilder()
.handlers()
.async() // habilita objetos assíncronos (são habilitados por padrão; use apenas caso deseje tornar a utilização explícita)
.target(MyApi.class)
.build();Os seguintes tipos assíncronos são suportados:
Future
public interface MyApi {
@Path("/customers/{id}") @Get
Future<Customer> getCustomerById(@PathParameter String id);
}CompletableFuture
public interface MyApi {
@Path("/customers/{id}") @Get
CompletableFuture<Customer> getCustomerById(@PathParameter String id);
}FutureTask
public interface MyApi {
@Path("/customers/{id}") @Get
FutureTask<Customer> getCustomerById(@PathParameter String id);
}AsyncEndpointCall
Esse objeto é análogo ao EndpointCall, e fornece métodos para execução assíncrona.
import com.github.ljtfreitas.restify.http.client.call.async.AsyncEndpointCall;
public interface MyApi {
@Path("/customers/{id}") @Get
AsyncEndpointCall<Customer> getCustomerById(@PathParameter String id);
}@CallbackParameter
Ao invés de lidar com o retorno do método, outra possibilidade é utilizar um parâmetro anotado com @CallbackParameter, que represente um callback para a execução assíncrona.
Ao utilizar parâmetros anotados com @CallbackParameter, o retorno do método deve ser void.
import com.github.ljtfreitas.restify.http.contract.CallbackParameter;
import com.github.ljtfreitas.restify.http.client.call.async.EndpointCallSuccessCallback;
import com.github.ljtfreitas.restify.http.client.call.async.EndpointCallFailureCallback;
import com.github.ljtfreitas.restify.http.client.call.async.EndpointCallCallback;
public interface MyApi {
/* callback do tipo java.util.function.BiConsumer:
uma função que recebe o objeto de resposta e a exceção (se houver)
*/
@Path("/customers/{id}") @Get
void getCustomerById(@PathParameter String id, @CallbackParameter BiConsumer<Customer, Throwable> callback);
/* EndpointCallSuccessCallback permite capturar a resposta deserializada como um objeto.
Essa interface possui um único método onSuccess(T response)
*/
@Path("/customers/{id}") @Get
void getCustomerById(@PathParameter String id, @CallbackParameter EndpointCallSuccessCallback<Customer> success);
/* EndpointCallFailureCallback permite capturar a exceção gerada pela requisição HTTP, se ocorrer.
Essa exceção pode ser um problema de I/O ou uma resposta de erro (4xx, 5xx)
Essa interface possui um único método onFailure(Throwable throwable):
*/
@Path("/customers/{id}") @Get
void getCustomerById(@PathParameter String id, @CallbackParameter EndpointCallFailureCallback failure);
/* É possível usar parâmetros dos dois tipos
*/
@Path("/customers/{id}") @Get
void getCustomerById(@PathParameter String id,
@CallbackParameter EndpointCallSuccessCallback<Customer> success,
@CallbackParameter EndpointCallFailureCallback failure);
/* Existe uma terceira interface chamada EndpointCallCallback, que extende EndpointCallSuccessCallback e EndpointCallFailureCallback.
Essa interface também é uma opção caso você precise dos dois callbacks (sucesso e falha)
*/
@Path("/customers/{id}") @Get
void getCustomerById(@PathParameter String id, @CallbackParameter EndpointCallCallback<Customer> callback);
}Configuração
Os handlers responsáveis pela execução de métodos assíncronos utilizam o mesmo thread pool configurado para requisições assíncronas. A documentação sobre requisições assíncronas fornece mais detalhes de configuração e customizações.
Last updated
Was this helpful?