Spring :
JDK 8:
I'm validating input request. Is there a way to nicely chain these optionals? Or some other way to make it look a bit nicer and get rid off too many if optional checks? kinda looks ugly.
In REST controller class:
{
...
Optional<ResponseEntity<?>> operationError = requestValidator.handleOperationError(bodyParams, myHandler, serviceInstance, null);
if( operationError.isPresent()){
return operationError.get();
}
Optional<ResponseEntity<?>> otherError = requestValidator.checkRequestOther(serviceInstance, bodyParams, instanceAction);
if( otherError.isPresent()){
return otherError.get();
}
Optional<ResponseEntity<?>> someWeirdError = requestValidator.checksomeWeird(serviceInstance, instanceAction);
if( someWeirdError.isPresent()){
return someWeirdError.get();
}
Optional<ResponseEntity<?>> conflictError = requestValidator.conflictExists(instanceAction,serviceInstance);
if( conflictError.isPresent()){
return conflictError.get();
}
//If All fine start doing business logic
}
Benoit :
If you need a strict Java 8 solution, you can create an helper class:
public class OptionalHelper {
public static <T> Optional<T> findFirstPresent(Supplier<Optional<T>>... optionals) {
return Arrays.stream(optionals)
.map(Supplier::get)
.filter(Optional::isPresent)
.findFirst()
.orElse(Optional.empty());
}
}
And use it like this:
Optional<ResponseEntity<?>> validationError = OptionalHelper.findFirstPresent(
() -> requestValidator.handleOperationError(bodyParams, myHandler, serviceInstance, null),
() -> requestValidator.checkRequestOther(serviceInstance, bodyParams, instanceAction),
() -> requestValidator.checkSomeWeird(serviceInstance, instanceAction),
() -> requestValidator.conflictExists(instanceAction, serviceInstance));
if (validationError.isPresent()) {
return validationError.get();
}
Guess you like
Origin http://43.154.161.224:23101/article/api/json?id=308619&siteId=1