java-restify
tentará deserializar o corpo da resposta HTTP para o tipo de retorno do método, mas nem sempre esse será o comportamento desejado.Optional
, a resposta (se houver) deve ser deserializada para um objeto Customer
. Ou seja, o tipo de retorno do método é diferente do tipo que representa a resposta.Optional
encapsulando o objeto de resposta) é perfeitamente possível e válido. O que permite esse tipo de composição é a interface EndpointCallHandler
, um objeto que permite diferenciar e adaptar o objeto de resposta da requisição para o tipo de retorno do método.java-restify
registra um conjunto de handlers
para vários tipos de objetos diferentes. Os handlers
são utilizados em um formato de chain of responsability
, permitindo múltiplos níveis de composição e adaptação.Future
:handler
responsável por métodos que retornam Future
irá adaptar a resposta do handler
seguinte, que é o responsável por retornos do tipo Optional
, que por sua vez utiliza um handler
que não faz nenhuma adaptação, apenas retornando o objeto de resposta deserializado.EndpointCallHandler
são fornecidas por implementações de EndpointCallHandlerProvider
, uma fábrica com duas especializações: EndpointCallHandlerAdapter
, que gera handlers
que adaptam outros handlers
, e EndpointCallHandlerFactory
, que fabrica handlers
que convertem a resposta da requisição para outros tipos.EndpointCallHandler
é responsável por um formato ou assinatura de método em particular, como um tipo de retorno específico ou a presença de alguma anotação. O java-restify
fornece várias implementações, suportando muitos casos de uso diferentes. Consulte os tipos de retorno suportados por padrão.Future
. Consulte a documentação detalhada sobre requisições assíncronas, e os tipos de retorno assíncronos suportados por padrãohandler
específico para o tipo de retorno do método? Nos exemplos acima, utilizamos um objeto Customer
do nosso próprio modelo para representar a resposta:Customer
mas não existe um handler
específico para esse tipo; nesse cenário, será utilizado uma implementação de EndpointCallHandler
que não realiza nenhuma adaptação, assumindo que o tipo de resposta da requisição é mesmo tipo de retorno do método.handlers
fornecidos pelo java-restify
são registrados automaticamente, caso estejam disponíveis no classpath
.handlers
facilmente:java-restify
também oferece suporte para objetos específicos de alguns frameworks: