Class ReqItem<T>
- Type Parameters:
T- tipo do valor do parâmetro
Classe que representa um parâmetro ou parte presente na requisição. Permite a definição de condições para que o parâmetro seja obrigatório, transformações e validações do valor.
Como funciona:
A classe ReqItem é utilizada para representar um parâmetro ou parte presente na requisição.
Todas as validações e transformações do valor do parâmetro são feitas através de métodos encadeados executados
apenas na chamada do método getValue() ou getValueOrElse(Object).
Foi implementada uma nova interface chamada ReqItem.ApiFunction que representa uma Function
que lança uma ApiMisusageException. Assim, o fluxo dos métodos é interrompido no primeiro erro de validação,
que contém a mensagem de erro e o código de status HTTP para exposição na API.
Exemplo de uso:
É recomendada a utilização por meio da classe RequestParameterProcessor,
com os métodos RequestParameterProcessor.parameter(String) e RequestParameterProcessor.part(String).
String name = parameter("name").required().map(String::toUpperCase).getValue();
Neste exemplo, o parâmetro "name" é obrigatório e seu valor é transformado para maiúsculas.
List<Part> files = part("file").required().getValue();
Neste exemplo, a parte "file" é obrigatória.
JSONObject name = parameter("x_path_internally_detached")
.requiredIf(this.format == INTERNALLY_DETACHED)
.map(JSONObject::new)
.getValue();
Neste exemplo, o parâmetro "x_path_internally_detached" é obrigatório se a variável "format" for igual a "INTERNALLY_DETACHED".
Se o parâmetro fo opcional e não estiver presente na requisição, o valor retornado será null.
String name = parameter("name").availableValues("A", "B", "C").getValueOrElse("A");
Neste exemplo, o parâmetro "name" só será válido se seu valor for "A", "B" ou "C".
Se ele não estiver presente na requisição, o valor retornado será "A".
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceInterface q representa umaFunctionque lança umaApiMisusageException -
Method Summary
Modifier and TypeMethodDescriptionavailableValues(Collection<T> availableValues) Define os valores disponíveis para o parâmetroavailableValues(T... availableValues) Define os valores disponíveis para o parâmetro.getValue()Retorna o valor do parâmetrogetValueOrElse(T defaultValue) Retorna o valor do parâmetro ou um valor padrão se o parâmetro não estiver presente na requisição<K> ReqItem<K> map(ReqItem.ApiFunction<T, K> transformFunction) Transforma o valor do parâmetroDefine uma validação para o valor do parâmetrorequired()Define o parâmetro como obrigatóriorequiredIf(boolean condition) Define o parâmetro como obrigatório se a condição for atendidarequiredIf(Supplier<Boolean> condition) Define o parâmetro como obrigatório se a condição for atendida
TODO: verificar a necessidade de utilizar Supplierao invés de boolean.
-
Method Details
-
required
-
requiredIf
Define o parâmetro como obrigatório se a condição for atendida
TODO: verificar a necessidade de utilizar Supplierao invés de boolean. Optou-se por essa abordagem por possibilitar o envio de métodos mais complexos que apenas são executados quando necessário. - Parameters:
condition- condição para que o parâmetro seja obrigatório- Returns:
- este objeto
-
requiredIf
-
availableValues
Define os valores disponíveis para o parâmetro- Parameters:
availableValues- valores disponíveis- Returns:
- este objeto
-
availableValues
Define os valores disponíveis para o parâmetro. Não é reaproveitável o uso deavailableValues(Collection)por questões ambiguidade de tipos.List.of(T... availableValues)pode retornar List invalid input: '<' T invalid input: '>' ou List invalid input: '<' T[] invalid input: '>'- Parameters:
availableValues- valores disponíveis- Returns:
- este objeto
-
match
-
match
-
map
Transforma o valor do parâmetro- Type Parameters:
K- tipo do novo valor- Parameters:
transformFunction- função que transforma o valor- Returns:
- um novo
ReqItemcom o valor transformado
-
getValue
Retorna o valor do parâmetro- Returns:
- valor do parâmetro ou null se o parâmetro não estiver presente na requisição e não for obrigatório
- Throws:
ApiMisusageException- se o valor do parâmetro for inválido ou se o parâmetro for obrigatório e não estiver presente na requisição
-
getValueOrElse
Retorna o valor do parâmetro ou um valor padrão se o parâmetro não estiver presente na requisição- Parameters:
defaultValue- valor padrão- Returns:
- valor do parâmetro ou valor padrão
- Throws:
ApiMisusageException- se o valor do parâmetro for inválido
-