【问题标题】:How can I search product by entered keyword from entity in Spring Boot?如何通过在 Spring Boot 中的实体中输入关键字来搜索产品?
【发布时间】:2021-09-10 07:39:02
【问题描述】:

我正在开发一个使用 Spring Boot 作为后端开发的电子商务 Web 应用程序。索引页面上有一个搜索框。从那里,当用户访问我的应用程序并尝试通过在搜索框中输入任何关键字来搜索某些产品时。因此,如果输入的关键字与实体匹配,则显示匹配的关键字结果列表,如果不匹配,则显示任何错误消息。因此,输入关键字中的类别、标签、子类别、产品实体应匹配并返回 JSON 响应到前端。

下面是我的控制器返回输入的关键字响应:

public ResponseEntity<?> searchbykeyword(HttpServletRequest request, @RequestParam("keyword") String keyword) {
  logger.info("Global search function is calling !!!");
  CustomResponse = ResponseFactory.getResponse(request);
  try {
    List<Product> text = null;
    List<Category> category = null;
    List<Tag> tag = null;
    List<Subcategory> subcategory = null;
    if(keyword != null) {
      System.out.println("Entered keyword is : || "+keyword);
      category = categoryDao.findByNameContains(keyword);
      
      tag = tagDao.findByNameContains(keyword);
      
      subcategory = subcategoryDao.findByNameContains(keyword);
      
      text = productdao.findByPrductnameContainsOrDescriptivenameContainsOrFlavorContainsOrCategoryOrTagOrSubcategory(keyword, keyword, keyword, category, tag, subcategory);
    }
    if (text != null) {
      CustomResponse.setResponse(text);
      CustomResponse.setStatus(CustomStatus.OK);
      CustomResponse.setStatusCode(CustomStatus.OK_CODE);
      CustomResponse.setResponseMessage(CustomStatus.SuccessMsg);
    }
  } catch (Exception e) {
    e.printStackTrace();
    CustomResponse.setResponse(null);
    CustomResponse.setStatus(CustomStatus.Error);
    CustomResponse.setStatusCode(CustomStatus.Error_CODE);
    CustomResponse.setResponseMessage(CustomStatus.ErrorMsg);
  }
  return new ResponseEntity<ResponseDao>(CustomResponse, HttpStatus.OK);
}

上面的代码没有按预期工作。我也试图弄清楚,但没有成功。 如果您有任何想法或建议,那将对我有所帮助。

【问题讨论】:

  • "上面的代码没有按预期工作。" 那么你实际得到了什么以及你期望得到什么?查询不正常吗?如果查询不正确,您应该发布您的 daos 代码,例如来自categoryDao.findByNameContains(keyword)tagDao.findByNameContains(keyword);subcategoryDao.findByNameContains(keyword);productdao.findByPrductnameContainsOrDescriptivenameContainsOrFlavorContainsOrCategoryOrTagOrSubcategory(keyword, keyword, keyword, category, tag, subcategory); 等的代码
  • 请为给定的关键字提供不同的不同示例,期望什么以及实际响应是什么。如果遇到任何错误,也请粘贴堆栈跟踪。
  • 我没有收到任何错误。假设我输入了蛋糕。然后我应该得到匹配“蛋糕”的结果。非常常见的例子是 Flipkart 或亚马逊。无论您在搜索框中输入什么内容,都可以获得搜索结果列表。
  • @Rakhi 好的,但是执行查询的代码在哪里?请根据我的上述评论编辑您的问题并发布 daos 的代码。
  • @pleft 好的,我会更新我的代码。

标签: spring-boot hibernate spring-data-jpa


【解决方案1】:

我已更改以下代码:

@RequestMapping(value = AkApiUrl.searchbykeyword, method = { RequestMethod.POST, RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
        public ResponseEntity<?> searchbykeyword(HttpServletRequest request, HttpSession session, @RequestParam("keyword") String keyword) {
            logger.info("Global search function is calling !!!");
            CustomResponse = ResponseFactory.getResponse(request);
        
            try {
                List<MappedCity> product = null;
                List<Product> text = null;
                List<Category> category = null;
                List<Tag> tag = null;
                List<Subcategory> subcategory = null;
                if(keyword != null) {
                    category = categoryDao.findByNameContainingIgnoreCase(keyword);
                    tag = tagDao.findByNameContainingIgnoreCase(keyword);
                    subcategory = subcategoryDao.findByNameContainingIgnoreCase(keyword);
                    text = productdao.findByPrductnameContainsIgnoreCaseOrDescriptivenameContainsIgnoreCaseOrFlavorContainsIgnoreCaseOrCategoryInOrTagInOrSubcategoryIn(keyword, keyword, keyword,category,tag,subcategory);
                    product = mappedcitydao.findTop5ByProductInAndStatusOrderByCreateddatetimeDesc(text, 1);
                }
                if (product != null) {
                    CustomResponse.setResponse(product);
                    CustomResponse.setStatus(CustomStatus.OK);
                    CustomResponse.setStatusCode(CustomStatus.OK_CODE);
                    CustomResponse.setResponseMessage(CustomStatus.SuccessMsg);
                }
            } catch (Exception e) {
                e.printStackTrace();
                CustomResponse.setResponse(null);
                CustomResponse.setStatus(CustomStatus.Error);
                CustomResponse.setStatusCode(CustomStatus.Error_CODE);
                CustomResponse.setResponseMessage(CustomStatus.ErrorMsg);
            }
            return new ResponseEntity<ResponseDao>(CustomResponse, HttpStatus.OK);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2020-06-04
    • 1970-01-01
    相关资源
    最近更新 更多