【问题标题】:method count(JobViewWrapper) is already defined方法 count(JobViewWrapper) 已经定义
【发布时间】:2021-02-12 16:16:53
【问题描述】:

我目前正在学习spring boot,遇到错误提示

method count(JobViewWrapper) is already defined

是的,因为它有 2 个相同的方法名,但该方法有 2 个单独的功能,第一个是计算所有带有已删除标志 1 的作业。 第二个(count-active),是统计所有已删除标志为 1 且为活动标志 1 的作业。

所以我需要这两种方法,有解决方法吗?

@PostMapping(value = "/count")
public long count(@RequestBody(required = false) JobViewWrapper wrapper) {
    System.out.println("into controller count");
    if (wrapper == null) {
        wrapper = new JobViewWrapper();
    }
    System.out.println("Prepare to count service");
    return JobService.countLazyView();
}
    
@PostMapping(value = "/count-active")
public long count(@RequestBody(required = false) JobViewWrapper wrapper) {
    System.out.println("into controller count");
    if (wrapper == null) {
        wrapper = new JobViewWrapper();
    }
    System.out.println("Prepare to count service");
    return JobService.countLazyViewIsActive();
}

我的服务

public long countLazyView() {
    return lowonganKerjaRepo.countLazyView();
}
    
public long countLazyViewIsActive() {
    return lowonganKerjaRepo.countLazyViewIsActive();
}

【问题讨论】:

  • 改为调用第二个countActive
  • 在同一个类中不能有 2 个具有相同签名(名称 + 参数)的方法。重命名其中一个
  • Federico,我使用了 2,因为我需要 /count 来计算 repo 中的所有它们,它只有过滤“where deleted=1”,并且值 /count-active 的方法在 repo 中有查询“ where deleted=1 and is_active=1" 所以它会使计数差异记录数
  • pedrohreis,JobViewWrapper 实际上是一个类名,我试图在该方法中重命名“包装器”,如“包装器1”,但仍然出现相同的错误有什么办法解决这个问题?

标签: java spring spring-boot lazydatamodel


【解决方案1】:

如果你真的想overload method count必须选择三个可用选项之一:

  1. 提供不同数量的参数:
@PostMapping(value = "/count")
public long count(@RequestBody(required = false) JobViewWrapper wrapper) {
// ...
    return JobService.countLazyView();
}

@PostMapping(value = "/count-active")
public long count() {
    return JobService.countLazyViewIsActive();
}
  1. 提供不同类型的参数:
@PostMapping(value = "/count")
public long count(@RequestBody(required = false) JobViewWrapper wrapper) {
// ...
    return JobService.countLazyView();
}

@PostMapping(value = "/count-active")
public long count(@RequestBody(required = false) ActiveJobViewWrapper wrapper) {
    return JobService.countLazyViewIsActive();
}
  1. 提供不同的参数顺序(在这种情况下似乎不适用)。

如果这些选项都不能选择,您将有以下选择:

  1. count()countActive这些方法提供不同的名称

  2. 将这些方法替换为具有附加参数的一种方法(API 调用可能更改为 /count?active=true):

@PostMapping(value = "/count")
public long count(
    @RequestParam(name = "active", required = false, defaultValue = "false") Boolean active, 
    @RequestBody(required = false) JobViewWrapper wrapper) {
// ...
    
    return active ? JobService.countLazyViewIsActive() : JobService.countLazyView();
}

【讨论】:

  • 所以..是的,我使用了第二个解决方案,因为这将是最简单和最简单的方法。我为此开设了一个新课程。谢谢你,亚历克斯,你是一个救生员..
猜你喜欢
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多