Mysql
 sql >> база данни >  >> RDS >> Mysql

Java Spring REST API Обработка на много допълнителни параметри

Можете да направите това лесно с JpaSpecificationExecutor и персонализирана Specification :https://spring .io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

Бих заменил HashMap с DTO, съдържащ всички незадължителни параметри за получаване, след което бих изградил спецификациите въз основа на този DTO, очевидно можете също да запазите HashMap и да изградите спецификацията въз основа на него.

По принцип:

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
}

И контролерът:

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

Услуга:

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

Хранилище:

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

Само бърз пример, адаптиран от фирмен код, разбирате идеята!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да комбинирам агрегатни функции в MySQL?

  2. Търсене в пълен текст на PDO и MySQL

  3. Как да поддържаме ограничение на външния ключ в различни бази данни?

  4. Ограничения за съхранение на MySQL потребителски дефинирани променливи

  5. MySQL Много-към-много Изберете