Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Java Spring REST API Menangani Banyak Parameter Opsional

Anda dapat melakukannya dengan mudah dengan JpaSpecificationExecutor dan Specification custom khusus :https://spring .io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

Saya akan mengganti HashMap dengan DTO yang berisi semua parameter get opsional, kemudian membuat spesifikasi berdasarkan DTO itu, jelas Anda juga dapat menyimpan HashMap dan membangun spesifikasi berdasarkan itu.

Pada dasarnya:

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
}

Dan pengontrolnya:

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

Layanan:

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

Repositori:

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

Hanya contoh cepat yang diadaptasi dari kode perusahaan, Anda mengerti!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Indeks MySQL - apa praktik terbaiknya?

  2. Facebook tidak dapat mengikis data meta setelah saya memindahkan Wordpress ke server baru

  3. Pencarian SQL jamak/tunggal

  4. baris terakhir kedua dari tabel mysql

  5. EEE MMM dd HH:mm:ss ZZZ yyyy format tanggal ke java.sql.Date