山东大学软件学院项目实训-创新实训-基于大模型的旅游平台 汇总(十四)

在本文中我们讲深度探讨我们项目中景点部分的后端实现。该页面样子如下:

我们的后端实现的部分截图:

      @Autowired
      private SightService sightService;

这行代码使用了Spring框架的 @Autowired 注解来自动注入 SightService 类的实例。这意味着Spring将自动查找配置好的相应类型的bean,并将其实例分配给 sightService 变量。

      // 导航到分页视图的sight页面,并传递分页查询的数据
      @GetMapping("/sight")
      public String sightPage(){
          return "sight"; // 这里返回sight.html视图名称
      }
  ​
      @GetMapping("/sight_detail")
      public String sightDetailPage(){
          return "sight_detail"; // 这里返回sight.html视图名称
      }
  1. sightPage 方法:

    使用 @GetMapping("/sight") 注解,这个方法响应对 /sight URL的GET请求。

    方法的作用是导航到一个名为 "sight" 的视图,加载一个名为 sight.html 的页面。

    这个页面用于显示景点分页查询的结果展示。

  2. sightDetailPage 方法:

    使用 @GetMapping("/sight_detail") 注解,这个方法响应对 /sight_detail URL的GET请求。

    方法的目的是导航到一个名为 "sight_detail" 的视图,加载一个名为 sight.detail 的页面。

    这个页面通常用于展示景点的详细信息

  
      // 景点分页查询
      @GetMapping("/sight/api/page")
      @ResponseBody
      public ResponseEntity<ApiResponse<Page<Sight>>> apiSightPage(
              @RequestParam(value = "page", defaultValue = "1") int pageNum,
              @RequestParam(value = "size", defaultValue = "9") int pageSize,
              @RequestParam(value = "address", defaultValue = "北京",required = false) String address) {
  ​
          Page<Sight> page = new Page<>(pageNum, pageSize);
          QueryWrapper<Sight> queryWrapper = new QueryWrapper<>();
          queryWrapper.orderByDesc("qunar_price");
  ​
          if (address != null && !address.isEmpty()) {
              queryWrapper.like("address", address); // 模糊匹配address字段
          }
  ​
          Page<Sight> result = sightService.page(page, queryWrapper);
          ApiResponse<Page<Sight>> response = ApiResponse.success(result);
          return ResponseEntity.ok(response);
      }

这部分代码定义了一个Spring MVC控制器方法,用于处理对景点数据的分页查询请求。该方法通过@GetMapping("/sight/api/page")注解来处理对应URL的GET请求,并使用@ResponseBody注解来指示方法的返回值应该作为响应体直接返回给客户端。

方法签名:

  
  public ResponseEntity<ApiResponse<Page<Sight>>> apiSightPage(...)

返回类型是ResponseEntity<ApiResponse<Page<Sight>>>,这表示方法会返回一个包含ApiResponseResponseEntity对象,ApiResponse中包含了类型为Page<Sight>的分页数据。

参数列表:

@RequestParam(value = "page", defaultValue = "1") int pageNum:接收名为"page"的请求参数,如果未提供,则默认为1,表示请求的页码。

@RequestParam(value = "size", defaultValue = "9") int pageSize:接收名为"size"的请求参数,如果未提供,则默认为9,表示每页显示的记录数。

@RequestParam(value = "address", defaultValue = "北京", required = false) String address:接收名为"address"的请求参数,如果未提供,则默认为"北京",该参数用于过滤景点的地址。

业务逻辑:

创建Page<Sight>对象:该对象用于设置分页请求的具体参数,如页码和每页大小。

创建QueryWrapper<Sight>对象:用于构建查询条件,这里通过orderByDesc("qunar_price")设置按"qunar_price"(去哪儿价格)降序排序。

地址过滤:如果地址参数不为空且不是空字符串,使用queryWrapper.like("address", address)添加模糊匹配地址的条件。

查询执行:调用sightService.page(page, queryWrapper)执行分页查询。该方法利用MyBatis Plus的分页功能查询数据库,并返回分页结果。

返回结果:使用ApiResponse.success(result)包装查询结果,这是一个自定义的响应格式,用于标准化API的输出。最后,使用ResponseEntity.ok(response)将包装后的结果作为HTTP响应返回给客户端。

  
      /**
       * 创建新的景点
       * @param sight 景点实体
       * @return 返回创建的景点的统一响应
       */
      @PostMapping
      public ApiResponse<Sight> createSight(@RequestBody Sight sight) {
          boolean saved = sightService.save(sight);
          return saved ? ApiResponse.success(sight) : ApiResponse.error(500, "创建失败");
      }

这段代码是用于创建一个新的景点。方法通过HTTP POST请求接收一个景点对象(sight),然后尝试将其保存到数据库中。如果保存成功,返回一个包含景点信息的成功响应;如果失败,返回一个错误信息为"创建失败"的响应。这一过程通过调用sightServicesave方法完成。

  
      /**
       * 根据sight_id查询景点以及景点的评论和景点的评论的图片列表
       * @return 返回总的信息
       */
      @GetMapping("/sight/{sightId}")
      public ResponseEntity<SightDetailDTO> getSightDetails(@PathVariable Long sightId) {
          SightDetailDTO sightDetails = sightService.getSightDetails(sightId);
          if (sightDetails == null) {
              return ResponseEntity.notFound().build();
          }
          return ResponseEntity.ok(sightDetails);
      }

这段代码是一个使用Spring Boot编写的API端点,主要用于根据景点ID查询景点详细信息,包括景点的评论和评论的图片列表。下面是对代码的简化解释:

  1. @GetMapping("/sight/{sightId}")

    这个注解将HTTP GET请求映射到此方法上,其中URL路径包含一个动态部分 {sightId},用于从URL中捕获景点的ID。

  2. 方法签名:public ResponseEntity<SightDetailDTO> getSightDetails(@PathVariable Long sightId)是方法的定义。

    ResponseEntity<SightDetailDTO>:表示方法返回的类型是ResponseEntity,其中包含了类型为SightDetailDTO的数据。ResponseEntity用来包装HTTP响应,包括状态码和数据。

    @PathVariable Long sightId@PathVariable注解指示方法参数sightId应该从URL的路径变量中获取。此处,它将从路径中匹配到的sightId赋值给方法参数。

  3. 方法体

    SightDetailDTO sightDetails = sightService.getSightDetails(sightId);:调用sightService中的getSightDetails方法,传入sightId来获取景点详细信息。返回的数据被存储在变量sightDetails中。

    if (sightDetails == null):检查sightDetails是否为null,即检查是否未找到对应的景点详细信息。

    return ResponseEntity.notFound().build();:如果未找到景点详细信息,返回HTTP 404 Not Found响应。

    return ResponseEntity.ok(sightDetails);:如果找到了景点详细信息,返回包含这些信息的HTTP 200 OK响应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值