【发布时间】: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&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