java-restify
Search…
Objetos suportados

Tipos suportados

Por padrão, os seguintes tipos de retorno de método são suportados:
  • String
1
public interface MyApi {
2
3
@Path("/customers/{id}") @Get
4
String getCustomerAsString(@PathParameter String id);
5
}
Copied!
  • Tipos primitivos ou wrappers
1
public interface MyApi {
2
3
@Path("/integer") @Get
4
int integer();
5
6
@Path("/boolean") @Get
7
Boolean boolean();
8
9
@Path("/double") @Get
10
double double();
11
}
Copied!
  • byte[]
1
public interface MyApi {
2
3
@Path("/customers/{id}") @Get
4
byte[] getCustomerAsBytes(@PathParameter String id);
5
}
Copied!
  • InputStream
1
public interface MyApi {
2
3
@Path("/customers/{id}") @Get
4
InputStream getCustomerAsStream(@PathParameter String id);
5
}
Copied!
  • Optional
1
public interface MyApi {
2
3
@Path("/customers/{id}") @Get
4
Optional<Customer> getCustomerById(@PathParameter String id);
5
}
Copied!
  • Collection
1
public interface MyApi {
2
3
@Path("/customers") @Get
4
Collection<Customer> getAllCustomers();
5
}
Copied!
  • Stream
1
public interface MyApi {
2
3
@Path("/customers") @Get
4
Stream<Customer> getAllCustomers();
5
}
Copied!
  • Enumeration
1
public interface MyApi {
2
3
@Path("/customers") @Get
4
Enumeration<Customer> getAllCustomers();
5
}
Copied!
  • Iterator
1
public interface MyApi {
2
3
@Path("/customers") @Get
4
Iterator<Customer> getAllCustomers();
5
}
Copied!
  • ListIterator
1
public interface MyApi {
2
3
@Path("/customers") @Get
4
ListIterator<Customer> getAllCustomers();
5
}
Copied!
  • Iterable
1
public interface MyApi {
2
3
@Path("/customers") @Get
4
Iterable<Customer> getAllCustomers();
5
}
Copied!
  • Queue
1
public interface MyApi {
2
3
@Path("/customers") @Get
4
Queue<Customer> getAllCustomers();
5
}
Copied!
  • 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).
1
public interface MyApi {
2
3
@Path("/customers/{id}") @Get
4
Callable<Customer> getCustomerById(@PathParameter String id);
5
}
Copied!
  • 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).
1
public interface MyApi {
2
3
@Path("/customers") @Post
4
Runnable createCustomer(@BodyParameter Customer customer);
5
}
Copied!
  • 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.
1
import com.github.ljtfreitas.restify.http.client.call.EndpointCall;
2
3
public interface MyApi {
4
5
@Path("/customers/{id}") @Get
6
EndpointCall<Customer> getCustomerById(@PathParameter String id);
7
}
Copied!
  • Headers
Esse objeto é uma coleção imutável de cabeçalhos. Quando utilizado como retorno de método, irá conter os headers da resposta.
1
import com.github.ljtfreitas.restify.http.client.message.Headers;
2
3
public interface MyApi {
4
5
@Path("/customers/{id}") @Head
6
Headers getCustomerById(@PathParameter String id);
7
}
Copied!
  • StatusCode
Esse objeto representa o status HTTP da resposta.
1
import com.github.ljtfreitas.restify.http.client.message.response.StatusCode;
2
3
public interface MyApi {
4
5
@Path("/customers") @Post
6
StatusCode createCustomer(@BodyParameter Customer customer);
7
}
Copied!
  • 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.
1
import com.github.ljtfreitas.restify.http.client.response.EndpointResponse;
2
3
public interface MyApi {
4
5
@Path("/customers/{id}") @Get
6
EndpointResponse<Customer> getCustomerById(@PathParameter String id);
7
}
Copied!

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:
1
MyApi myApi = new RestifyProxyBuilder()
2
.handlers()
3
.async() // habilita objetos assíncronos (são habilitados por padrão; use apenas caso deseje tornar a utilização explícita)
4
.target(MyApi.class)
5
.build();
Copied!
Os seguintes tipos assíncronos são suportados:
  • Future
1
public interface MyApi {
2
3
@Path("/customers/{id}") @Get
4
Future<Customer> getCustomerById(@PathParameter String id);
5
}
Copied!
  • CompletableFuture
1
public interface MyApi {
2
3
@Path("/customers/{id}") @Get
4
CompletableFuture<Customer> getCustomerById(@PathParameter String id);
5
}
Copied!
  • FutureTask
1
public interface MyApi {
2
3
@Path("/customers/{id}") @Get
4
FutureTask<Customer> getCustomerById(@PathParameter String id);
5
}
Copied!
  • AsyncEndpointCall
Esse objeto é análogo ao EndpointCall, e fornece métodos para execução assíncrona.
1
import com.github.ljtfreitas.restify.http.client.call.async.AsyncEndpointCall;
2
3
public interface MyApi {
4
5
@Path("/customers/{id}") @Get
6
AsyncEndpointCall<Customer> getCustomerById(@PathParameter String id);
7
}
Copied!

@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.
1
import com.github.ljtfreitas.restify.http.contract.CallbackParameter;
2
import com.github.ljtfreitas.restify.http.client.call.async.EndpointCallSuccessCallback;
3
import com.github.ljtfreitas.restify.http.client.call.async.EndpointCallFailureCallback;
4
import com.github.ljtfreitas.restify.http.client.call.async.EndpointCallCallback;
5
6
public interface MyApi {
7
8
/* callback do tipo java.util.function.BiConsumer:
9
uma função que recebe o objeto de resposta e a exceção (se houver)
10
*/
11
@Path("/customers/{id}") @Get
12
void getCustomerById(@PathParameter String id, @CallbackParameter BiConsumer<Customer, Throwable> callback);
13
14
/* EndpointCallSuccessCallback permite capturar a resposta deserializada como um objeto.
15
Essa interface possui um único método onSuccess(T response)
16
*/
17
@Path("/customers/{id}") @Get
18
void getCustomerById(@PathParameter String id, @CallbackParameter EndpointCallSuccessCallback<Customer> success);
19
20
/* EndpointCallFailureCallback permite capturar a exceção gerada pela requisição HTTP, se ocorrer.
21
Essa exceção pode ser um problema de I/O ou uma resposta de erro (4xx, 5xx)
22
Essa interface possui um único método onFailure(Throwable throwable):
23
*/
24
@Path("/customers/{id}") @Get
25
void getCustomerById(@PathParameter String id, @CallbackParameter EndpointCallFailureCallback failure);
26
27
/* É possível usar parâmetros dos dois tipos
28
*/
29
@Path("/customers/{id}") @Get
30
void getCustomerById(@PathParameter String id,
31
@CallbackParameter EndpointCallSuccessCallback<Customer> success,
32
@CallbackParameter EndpointCallFailureCallback failure);
33
34
/* Existe uma terceira interface chamada EndpointCallCallback, que extende EndpointCallSuccessCallback e EndpointCallFailureCallback.
35
Essa interface também é uma opção caso você precise dos dois callbacks (sucesso e falha)
36
*/
37
@Path("/customers/{id}") @Get
38
void getCustomerById(@PathParameter String id, @CallbackParameter EndpointCallCallback<Customer> callback);
39
}
Copied!

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 modified 2yr ago