Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Java Spring REST API xử lý nhiều tham số tùy chọn

Bạn có thể thực hiện việc này dễ dàng với JpaSpecificationExecutor và một Specification tùy chỉnh : https:// spring .io / blog / 2011/04/26 / advanced-spring-data-jpa-Specific-and-querydsl /

Tôi sẽ thay thế HashMap bằng một DTO chứa tất cả các tham số nhận tùy chọn, sau đó xây dựng các thông số kỹ thuật dựa trên DTO đó, rõ ràng bạn cũng có thể giữ HashMap và xây dựng thông số kỹ thuật dựa trên nó.

Về cơ bản:

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
}

Và bộ điều khiển:

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

Dịch vụ:

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

Kho lưu trữ:

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

Chỉ cần một ví dụ nhanh được điều chỉnh từ mã công ty, bạn sẽ có ý tưởng!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiệu suất MySQL DigitalOcean tốt nhất - ScaleGrid so với Cơ sở dữ liệu được quản lý DigitalOcean

  2. Hiển thị hình ảnh BLOB Laravel 4

  3. Tìm kiếm tính khả dụng với MySQL (và PHP)?

  4. Tại sao tôi không thể sử dụng một biến làm tên bảng trong một thủ tục được lưu trữ?

  5. Cách kết nối với MySQL bằng Python