Issue
I have a DTO with a few variables and I need to check if my DTO is empty.
I looked into older questions and found this one which is quite interesting Check object empty
But I have the feeling that my solution can be improved as it´s something quite raw.
Here is my code.
public boolean isEmpty() {
return StringUtils.isBlank(nombre) && StringUtils.isBlank(apellidos1) && StringUtils.isBlank(apellidos2) && StringUtils.isBlank(NIF)
&& StringUtils.isBlank(nFederado) && StringUtils.isBlank(fecha) && StringUtils.isBlank(poliza) && StringUtils.isBlank(estado)
&& StringUtils.isBlank(numeroLesion);
}
I use this function in the action of an API to check if it´s completely empty. here is my action:
@Override
public Map execute(Map params) throws Exception {
log.error(" En el action consultar federados action (en el punto que queremos) ");
ConsultarFederado consultaFederado = new ConsultarFederado();
Map result = new HashMap<>();
Map requestParams = (Map) params.get("request_params");
consultaFederado.setNombre(setValue("nombre", requestParams));
consultaFederado.setApellidos1(setValue("apellidos1", requestParams));
consultaFederado.setApellidos2(setValue("apellidos2", requestParams));
consultaFederado.setNIF(setValue("nif", requestParams));
consultaFederado.setFecha(setValue("fecha", requestParams));
consultaFederado.setPoliza(setValue("poliza", requestParams));
consultaFederado.setnFederado(setValue("nFederado", requestParams));
consultaFederado.setEstado(setValue("estado", requestParams));
consultaFederado.setNumeroLesion(setValue("numLesion", requestParams));
if (consultaFederado.isEmpty()) {
ConsultarFederadoDAO.consultaFederado(consultaFederado);
}
result.put("code", "997");
result.put("message", "Es necesario introducir parametros en la consulta");
log.error(" El resultado de la consulta es : " + result.toString());
return result;
}
Any thoughs on how i could improve this isEmpty()
method?
The DTO is an object with 9 Strings.
EDIT: isEmpty function improved based on Stephen comment
EDIT2:
The final action:
public Map execute(Map params) throws Exception {
log.error(" *********************** Consultar Federados Action INI ********************** ");
ConsultarFederado consultaFederado = new ConsultarFederado();
Map result = new HashMap<>();
Map requestParams = (Map) params.get("request_params");
log.info("setValue(nombre, requestParams)" + getValueValidated("nombre", requestParams));
consultaFederado.setNombre(getValueValidated("nombre", requestParams));
consultaFederado.setApellidos1(getValueValidated("apellidos1", requestParams));
consultaFederado.setApellidos2(getValueValidated("apellidos2", requestParams));
consultaFederado.setNIF(getValueValidated("nif", requestParams));
consultaFederado.setFecha(getValueValidated("fecha", requestParams));
consultaFederado.setPoliza(getValueValidated("poliza", requestParams));
consultaFederado.setEstado(getValueValidated("estado", requestParams));
consultaFederado.setNumeroLesion(getValueValidated("numLesion", requestParams));
if (!consultaFederado.isEmpty()) {
result = ConsultarFederadoDAO.consultaFederado(consultaFederado);
} else {
XWMException err = new XWMException();
err.addError("996", "Es necesario introducir parametros en la consulta");
throw err;
}
log.error("**************** RESULT_SEND : " + result.toString());
return result;
}
private String getValueValidated(String value, Map requestParams) {
return Objects.toString(requestParams.get(value), "");
}
And the object isEmpty() method:
public boolean isEmpty() {
return StringUtils.isBlank(nombre) && StringUtils.isBlank(apellidos1) && StringUtils.isBlank(apellidos2) && StringUtils.isBlank(NIF)
&& StringUtils.isBlank(fecha) && StringUtils.isBlank(poliza) && StringUtils.isBlank(estado)
&& StringUtils.isBlank(numeroLesion);
}
public boolean isEmptyGeneral() {
return StringUtils.isBlank(nombre) && StringUtils.isBlank(apellidos1) && StringUtils.isBlank(apellidos2) && StringUtils.isBlank(NIF)
&& StringUtils.isBlank(fecha) && StringUtils.isBlank(numeroLesion);
}
public boolean isEmptyEstado() {
return StringUtils.isBlank(nombre) && StringUtils.isBlank(apellidos1) && StringUtils.isBlank(apellidos2) && StringUtils.isBlank(NIF)
&& StringUtils.isBlank(fecha) && StringUtils.isBlank(numeroLesion);
}
public boolean isEmptyNombre() {
return StringUtils.isBlank(apellidos1) && StringUtils.isBlank(apellidos2) && StringUtils.isBlank(NIF) && StringUtils.isBlank(poliza)
&& StringUtils.isBlank(fecha) && StringUtils.isBlank(numeroLesion);
}
Finally i created 4 "isEmpty" methods to check a few special combinations inside my code.
Here is my logic:
public static Map consultaFederado(ConsultarFederado dto) throws XWMException, Exception {
if (StringUtils.isNotBlank(dto.getPoliza()) && dto.isEmptyGeneral()) {
throwParamsError();
}
if (StringUtils.isNotBlank(dto.getEstado()) && dto.isEmptyEstado()) {
throwParamsError();
}
if (StringUtils.isNotBlank(dto.getNombre()) && dto.isEmptyNombre()){
throwParamsError();
}
Map result = buscarFederados(dto);
return result;
}
Thank you eveyone for the feedback, without you this code would be quite worse
Solution
If you want a nicer look one, how about a lombok @NonNull check, and adding string empty check for all field in a private constructor.
import lombok.Builder;
import lombok.Data;
import lombok.NonNull;
import org.apache.commons.lang3.StringUtils;
@Data
@Builder
public class TestDTO {
@NonNull
private String first;
@NonNull
private String second;
@NonNull
private String third;
public static void main(String[] args) {
// TestDTO dto = TestDTO.builder().first("fdasf").build(); //Exception in thread "main" java.lang.IllegalArgumentException: second can't be blank/empty/null
TestDTO dto = TestDTO.builder().first("fdasf").second("fdasf").third("fdasfdsa").build();
System.out.println("dto = " + dto);
}
private TestDTO(final String first, final String second, final String third) {
if (StringUtils.isBlank(first)) {
throw new IllegalArgumentException("First can't be blank/empty/null");
}
if (StringUtils.isBlank(second)) {
throw new IllegalArgumentException("second can't be blank/empty/null");
}
if (StringUtils.isBlank(third)) {
throw new IllegalArgumentException("third can't be blank/empty/null");
}
this.first = first;
this.second = second;
this.third = third;
}
}
Answered By - wu hoyt
Answer Checked By - Senaida (JavaFixing Volunteer)