Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Java Spring REST API obsługuje wiele opcjonalnych parametrów

Możesz to łatwo zrobić za pomocą JpaSpecificationExecutor i niestandardową Specification :https://spring .io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

Zamieniłbym HashMap na DTO zawierający wszystkie opcjonalne parametry get, a następnie zbudowałbym specyfikacje w oparciu o to DTO, oczywiście możesz również zachować HashMap i zbudować specyfikację na jej podstawie.

Zasadniczo:

public class VehicleFilter implements Specification<Vehicle>
{
    private String art;
    private String userId;
    private String vehicle;
    private String identifier;

    @Override
    public Predicate toPredicate(Root<Vehicle> root, CriteriaQuery<?> query, CriteriaBuilder cb)
    {
        ArrayList<Predicate> predicates = new ArrayList<>();

        if (StringUtils.isNotBlank(art))
        {
            predicates.add(cb.equal(root.get("art"), art));
        }
        if (StringUtils.isNotBlank(userId))
        {
            predicates.add(cb.equal(root.get("userId"), userId));
        }
        if (StringUtils.isNotBlank(vehicle))
        {
            predicates.add(cb.equal(root.get("vehicle"), vehicle));
        }
        if (StringUtils.isNotBlank(identifier))
        {
            predicates.add(cb.equal(root.get("identifier"), fab));
        }

        return predicates.size() <= 0 ? null : cb.and(predicates.toArray(new Predicate[predicates.size()]));
    }

// getter & setter
}

A kontroler:

@RequestMapping(value = "/{ticket}/count", method = RequestMethod.GET)
public long getItemsCount(
    @PathVariable String ticket,
    VehicleFilter filter,
    HttpServletRequest request
) throws Exception
{
    return vehicleService.getCount(filter);
}

Usługa:

@Override
public long getCount(VehicleFilter filter)
{
    return vehicleRepository.count(filter);
}

Repozytorium:

@Repository
public interface VehicleRepository extends JpaRepository<Vehicle, Integer>, JpaSpecificationExecutor<Vehicle>
{
}

Wystarczy krótki przykład zaadaptowany z kodu firmy, masz pomysł!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie MySQL, w którym JOIN zależy od CASE

  2. Importowanie 8GB zrzutu mysql zajmuje dużo czasu

  3. Jak ustawić maksymalną liczbę procesów lub wątków MySQL?

  4. Problemy UTF8 MySQL w Rails - problemy z kodowaniem z utf8_general_ci

  5. Jak znaleźć brakujące wiersze danych za pomocą SQL?