0

我目前正在学习spring boot,遇到报错信息

method count(JobViewWrapper) is already defined

是的,这是因为它有 2 个相同的方法名称,但是该方法有 2 个单独的功能,第一个是使用已删除标志 1 计算所有作业。第二个(计数活动)是使用已删除标志 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();
}
4

1 回答 1

1

如果你真的想重载方法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();
}
于 2020-10-30T16:37:24.757 回答