【问题标题】:How can I properly override a method declared in an abstract generic restcontroller?如何正确覆盖在抽象通用 restcontroller 中声明的方法?
【发布时间】:2019-09-13 13:12:18
【问题描述】:


我在通过一些预先存在的代码实现函数时遇到了一些问题。

从事此项目的其他程序员之前定义了一个通用抽象“restcontroller”(它实际上并未注释为@RestController,但它旨在由具有该注释的类进行扩展)

public abstract class AbstractController<T extends AbstractEntity, R extends JpaRepository<T, Integer>> {
    @GetMapping(value = "/getall")
    public Paging<T> getAll(@RequestParam Integer itemsPerPage,
                            @RequestParam Integer pageIndex,
                            @RequestParam Map<String, String> filters,
                            @Autowired Consumer consumer) {

        //Fetch entities of type T from repository R and return them
    }

    //other generic crud operations

}

这个类通常由具体控制器扩展,这些控制器只是在其特定类型上定义其他操作,但不改变通用的 crud 操作。
我想要做的是扩展这个类,但覆盖 getAll 方法,如下所示:

@RestController
@RequestMapping("/api/tasks")
public class TaskController extends AbstractController<Task, TaskRepository> {
    @Override
    public Paging<Task> getAll(Integer itemsPerPage, Integer pageIndex, Map<String, String> filters, Consumer consumer) {
        LoggerFactory.getLogger(LazyTaskController.class).log("function called successfully!");
        Paging<Task> paging = super.getAll(itemsPerPage, pageIndex, filters, consumer);
        //do things with return value before returning
        return paging;
    }

}

如果我在没有覆盖 getAll 方法的情况下调用BASEURL/api/tasks/getall?itemsPerPage=25&amp;pageIndex=0,则参数连接正确(正如预期的那样,Map 包含两个值,itemsPerPage 和 pageIndex,consumer 包含intercace Consumer 的具体实现)。
但是,如果我确实覆盖它,则 Map 出于某种原因包含两个值,一个具有键“consumer”和类型 Proxy,另一个具有键“org.springframework.validation.BindingResult.consumer”和 BeanPropertyBindingResult 类型的值;并且消费者包含一个代理。

我想@Override 会干扰消费者的自动装配,但我无法弄清楚如何正确实现我的想法(在返回之前操纵 getAll 的结果)。
提前谢谢你

【问题讨论】:

    标签: spring overriding spring-restcontroller spring-rest


    【解决方案1】:

    没关系,我解决了。
    通过将@RequestParam 和@Autowired 注释添加到被覆盖的方法参数也解决了Map 的问题。
    Consumer 具体类型的问题通过应用我在代码库中的另一个类上找到的自定义注释以某种方式解决了,我仍然不确定该注释的作用,但至少我现在知道要查找什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      相关资源
      最近更新 更多