赞
踩
在本文中我们讲深度探讨我们项目中景点部分的后端实现。该页面样子如下:
我们的后端实现的部分截图:
@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视图名称 }
sightPage 方法:
使用 @GetMapping("/sight")
注解,这个方法响应对 /sight
URL的GET请求。
方法的作用是导航到一个名为 "sight" 的视图,加载一个名为 sight.html
的页面。
这个页面用于显示景点分页查询的结果展示。
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>>>
,这表示方法会返回一个包含ApiResponse
的ResponseEntity
对象,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
),然后尝试将其保存到数据库中。如果保存成功,返回一个包含景点信息的成功响应;如果失败,返回一个错误信息为"创建失败"的响应。这一过程通过调用sightService
的save
方法完成。
/** * 根据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查询景点详细信息,包括景点的评论和评论的图片列表。下面是对代码的简化解释:
@GetMapping("/sight/{sightId}"):
这个注解将HTTP GET请求映射到此方法上,其中URL路径包含一个动态部分 {sightId}
,用于从URL中捕获景点的ID。
方法签名:public ResponseEntity<SightDetailDTO> getSightDetails(@PathVariable Long sightId)是方法的定义。
ResponseEntity<SightDetailDTO>
:表示方法返回的类型是ResponseEntity
,其中包含了类型为SightDetailDTO
的数据。ResponseEntity
用来包装HTTP响应,包括状态码和数据。
@PathVariable Long sightId
:@PathVariable
注解指示方法参数sightId
应该从URL的路径变量中获取。此处,它将从路径中匹配到的sightId
赋值给方法参数。
方法体:
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响应。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。