我在通过一些预先存在的代码实现函数时遇到了一些麻烦。
从事该项目的其他程序员之前定义了一个通用抽象的"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,正如预期的那样,消费者包含 intercace Consumer 的具体实现(。
但是,如果我确实覆盖了它,由于某种原因,Map 包含两个值,一个带有键"consumer"和类型代理,另一个带有键"org.springframework.validation.BindingResult.consumer"和类型为 BeanPropertyBindingResult 的值; 和消费者包含一个代理。
我想@Override会干扰消费者的自动接线,但我无法弄清楚如何正确实现我的想法(在返回之前操纵 getAll 的结果(。
提前谢谢你
没关系,我解决了。
Map 的问题也通过向被覆盖的方法参数添加@RequestParam和@Autowired注释来解决。
消费者具体类型的问题通过应用我在代码库中的另一个类上找到的自定义注释以某种方式解决了,我仍然不确定该注释的作用,但至少我知道现在要寻找什么。