Class ReqItem<T>
- Type Parameters:
T- tipo do valor do parâmetro
public final class ReqItem<T> extends Object
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 Classes Modifier and Type Class Description static interfaceReqItem.ApiFunction<T,R>Interface q representa umaFunctionque lança umaApiMisusageException -
Method Summary
Modifier and Type Method Description ReqItem<T>availableValues(Collection<T> availableValues)Define os valores disponíveis para o parâmetroReqItem<T>availableValues(T... availableValues)Define os valores disponíveis para o parâmetro.TgetValue()Retorna o valor do parâmetroTgetValueOrElse(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âmetroReqItem<T>match(Predicate<T> predicate)Define uma validação para o valor do parâmetroReqItem<T>match(Predicate<T> predicate, String errorMessage, int httpStatus)ReqItem<T>required()Define o parâmetro como obrigatórioReqItem<T>requiredIf(boolean condition)Define o parâmetro como obrigatório se a condição for atendidaReqItem<T>requiredIf(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
Define o parâmetro como obrigatório- Returns:
- este objeto
-
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
Define o parâmetro como obrigatório se a condição for atendida- Parameters:
condition- condição para que o parâmetro seja obrigatório- Returns:
- este objeto
-
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 < T > ou List < T[] >- Parameters:
availableValues- valores disponíveis- Returns:
- este objeto
-
match
Define uma validação para o valor do parâmetro- Parameters:
predicate- predicado que indica se o valor é válido- Returns:
- este objeto
-
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
-