Я делаю проект (основной магазин), и в настоящее время я застрял на заказе (например, по цене, названию и т. Д.).Я хочу знать, есть ли какой-нибудь простой способ сделать 1 гибкий запрос для многих случаев, используя order by для моих товаров.Потому что мой код возвращает неупорядоченный список объектов.
Так что в этом проекте я отправляю запрос на сервер после того, как пользователь выбирает тип сортировки в элементе комбинированного списка.После этого мой контроллер выбирает способ заказа, он вызывает запрос, а затем возвращает наши объекты.
Пожалуйста, помогите, и случайно вы можете сказать мне, какой способ переключения (order_type) лучше, вРеализация контроллера или службы?
PS Я использую причину переключения, если отправляю запрос на сервер как [http://localhost:9999/commodities/category-name/CPU/c.name%20asc], контроллер видит только c без .name asc, поэтому я использовал для этого коммутатор.
Код:
Контроллер:
@RestController
@RequestMapping("commodities")
public class CommodityController {
@GetMapping("category-name/{name}/{order_type}")
public ResponseEntity<List<CommodityDTO>> getCommodityByCategoryNameWithOrder(@PathVariable("name") String categoryName, @PathVariable("order_type") String order_type){
List<CommodityDTO> byCategoryWithOrder;
switch(order_type) {
case "name_asc":
byCategoryWithOrder = commodityService.getAllByCategoryNameWithOrder(categoryName, "c.name asc");
break;
case "name_desc":
byCategoryWithOrder = commodityService.getAllByCategoryNameWithOrder(categoryName, "c.name desc");
break;
case "price_asc":
byCategoryWithOrder = commodityService.getAllByCategoryNameWithOrder(categoryName, "c.price asc");
break;
case "price_desc":
byCategoryWithOrder = commodityService.getAllByCategoryNameWithOrder(categoryName, "c.price desc");
break;
default:
return null;
}
return new ResponseEntity<List<CommodityDTO>>(byCategoryWithOrder,HttpStatus.OK);
}
Реализация сервиса:
@Service
@Transactional
public class CommodityServiceImpl implements CommodityService{
@Autowired
private CommodityRepository commodityRepository;
@Autowired
private ObjectMapperUtils objectMapperUtils;
@Autowired
private CloudinaryService cloudinaryService;
@Override
public List<CommodityDTO> getAllByCategoryNameWithOrder(String categoryName, String order_type){
System.out.println("\n\n\n\nOrder type:\n"+order_type+"\n\n\n\n");
return objectMapperUtils.mapAll(commodityRepository.findAllByCategoryNameWithOrder(categoryName, order_type), CommodityDTO.class);
}
}
Хранилище:
public interface CommodityRepository extends JpaRepository<Commodity, Integer>{
@Query("Select c FROM Commodity c "
+ "Join Category ct on c.category.id = ct.id "
+ "where ct.name = ?1 "
+ "order by ?2")
List<Commodity> findAllByCategoryNameWithOrder(String categoryName, String order_type);
}