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 interface
ReqItem.ApiFunction<T,R>
Interface q representa umaFunction
que 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.T
getValue()
Retorna o valor do parâmetroT
getValueOrElse(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
ReqItem
com 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
-