gpt4 book ai didi

java - 将 Controller 端点映射到 Spring JPA 层

转载 作者:行者123 更新时间:2023-12-01 17:35:55 25 4
gpt4 key购买 nike

我编写了此请求映射,通过其 id 以及可选请求参数 TicketType 和 TicketStatus 来访问票证:

@GetMapping(path = "/tickets/{ticketId}")
@ResponseStatus(value = HttpStatus.OK)
public ResponseEntity<List<TicketResponse>> getTicketsById(@PathVariable("ticketId") final Long ticketId, @RequestParam("ticketType") final String ticketType, @RequestParam("ticketStatus") final String ticketStatus)

当前存储库包含基于 TicketId 或 TicketState 返回的方法:

    @Repository
public interface TicketRepository extends JpaRepository<TicketEntity, Long> {

Stream<TicketEntity> findByTicketIdAndTicketState(@Param("ticketId") Long ticketId);

Stream<TicketEntity> findByTicketIdAndTicketState(@Param("ticketId") Long ticketId, @Param("ticketState") String ticketState);

}

这些端点应该如何在 Controller 层公开?

当前端点是:

@GetMapping(path = "/{ticketId}")
@ResponseStatus(value = HttpStatus.OK)
public ResponseEntity<List<TicketResponse>> getTicketsByTicketId(
@PathVariable("productId") final Long ticketId, @RequestParam(name = "ticketState", required=false) final String ticketState) {

final List<TicketResponse> ticketsByTicketId = ticketService.getTicketsByTicketId(ticketId);

if(ticketsByTicketId.size() == 0){
return ResponseEntity.ok("No tickets found");
}
else {
return ResponseEntity.ok(ticketsByTicketId);
}

}

我应该添加新端点吗? :

或者更新 Controller 以根据查询选择要实现的 JPA 存储库方法?:

@GetMapping(path = "/{ticketId}")
@ResponseStatus(value = HttpStatus.OK)
public ResponseEntity<List<TicketResponse>> getTicketsByTicketId(
@PathVariable("productId") final Long ticketId, @RequestParam(name = "ticketState", required=false) final String ticketState) {

List<TicketResponse> tickets = null;

if(ticketState == null) {
tickets = ticketService.getTicketsByTicketId(ticketId);
}
else{
tickets = ticketService.getTicketsByTicketIdAndTicketState(ticketId, ticketState);
}

if(ticketsByTicketId.size() == 0){
return ResponseEntity.ok("No tickets found");
}
else {
return ResponseEntity.ok(ticketsByTicketId);
}

}

JPA 存储库将进一步扩展,以根据更多参数(例如 TicketType、ticketDescription )进行过滤。我只是提到这一点,因为如果需要检查哪个参数为空并选择相关的 JPA 查询,我的 Controller 逻辑将变得非常复杂。

最佳答案

使用Spring Data JPA规范可以解决这个 map 过滤问题。可以使用 Criteria API 构建复杂查询,具体取决于过滤参数。

A good article about JPA Specification

关于java - 将 Controller 端点映射到 Spring JPA 层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61041979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com