PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Friday, October 28, 2022

[FIXED] How to check if a DTO is empty

 October 28, 2022     dto, is-empty, java     No comments   

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 - Hi computer
Answer Checked By - Mary Flores (PHPFixing Volunteer)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing