如何在 Spring MVC 控制器中应用 Spring Data 投影?

2024-04-20

是否可以指定projection当直接调用数据存储库方法时?这是存储库代码 - 请注意,我不想通过 REST 公开它,而是希望能够从服务或控制器调用它:

@RepositoryRestResource(exported = false)
public interface UsersRepository extends PagingAndSortingRepository<User, Long> {

    @Query(value = "SELECT u FROM User u WHERE ....")
    public Page<User> findEmployeeUsers(Pageable p);
}

然后在控制器中我这样做:

@PreAuthorize(value = "hasRole('ROLE_ADMIN')")
@RequestMapping(value = "/users/employee")
public Page<User> listEmployees(Pageable pageable) {
    return usersRepository.findEmployeeUsers(pageable);
}

有什么办法可以指定projection for findEmployeeUsers像上面那样直接调用方法时?

我意识到上面的代码对某人来说可能看起来很奇怪......可以通过 REST 公开存储库并将@PreAuthorize存储库中的东西。认为控制器是进行安全检查的更合适的地方 - 它更自然且更易于测试。

So, can projection是否以某种方式传递到直接调用的存储库方法中?


不,不是,特别是因为投影通常根据具体情况应用于查询执行的结果。因此,它们目前被设计为选择性地应用于域类型。

从最新的 Spring Data Fowler 版本系列 GA 版本开始,投影基础设施可以在 Spring MVC 控制器中以编程方式使用。只需声明一个 Spring beanSpelAwareProxyProjectionFactory:

@Configuration
class SomeConfig {

  @Bean
  public SpelAwareProxyProjectionFactory projectionFactory() {
    return new SpelAwareProxyProjectionFactory();
  }
}

然后将其注入您的控制器并使用它:

@Controller
class SampleController {

  private final ProjectionFactory projectionFactory;

  @Autowired
  public SampleController(ProjectionFactory projectionFactory) {
    this.projectionFactory = projectionFactory;
  }

  @PreAuthorize(value = "hasRole('ROLE_ADMIN')")
  @RequestMapping(value = "/users/employee")
  public Page<?> listEmployees(Pageable pageable) {

    return usersRepository.findEmployeeUsers(pageable).//
      map(user -> projectionFactory.createProjection(Projection.class, user);
  }
}

了解最新版本的情况Page has a map(…)可用于动态转换页面内容的方法。我们使用 JDK 8 lambda 来提供转换步骤,使用ProjectionFactory.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Spring MVC 控制器中应用 Spring Data 投影? 的相关文章

随机推荐

  • 将 mogenerator 集成到 Xcode 4 中

    在我的应用程序中 我使用核心数据来实现持久数据保存 因为我已经看到 mogenerator 提供了一种很好的方法来创建和维护NSManagedObject子类 也具有附加功能 我正在寻找一些在 Xcode 4 中集成 monogenerat
  • 如何将 CSS 应用到 Mac Chrome 选择框?

    无论我做什么 使用 Mac OSX 10 9 2 和 Chrome 版本 33 0 1750 152 padding background color 没有任何效果 我真的只是想申请一个padding top and padding bot
  • 直到用户输入匹配变量为止

    好的 所以我正在尝试创建一个用户名 密码登录脚本 可能不是我仍在研究的最安全的想法 我的脚本将加载变量以与这样的文件进行比较 现在我只是在研究密码部分 path to variables conf 该文件将包含一个名为的变量 PASS SO
  • C# 睡眠检测 PowerModeChanged

    我希望我的程序在计算机进入睡眠状态时写入控制台 但我无法这样做 我认为我设置错误 这是我所拥有的 编辑 新的 cs 文件 using LightFX using System using System Threading using Sys
  • 如何让 Pyglet 为 Python 3 工作?

    我很高兴能使用 Pyglet 因为它的所有功能 但是我在 Python 3 上安装 Pyglet 的最新开发版本时遇到问题 我知道人们已经问过这个问题 但没有一个回答对我有任何帮助 更新 我的意思是 我无法为 Python 3 安装 Pyg
  • 循环动态展开子网格 - JQGrid

    我有一个带有使用 subGridRowExpanded 的子网格的网格 我想动态扩展网格的一些行 所以我写了以下内容 在第一个网格的 GridComplete 事件中 ids 是我的网格的行 id 数组 for int i 0 i lt i
  • 截断轨道后无法使用原始数据

    问题是如果我使用然后我尝试打印它 我仍然看到所有 html 标签 truncate默认情况下转义字符串 但您可以使用将其关闭 escape option description truncate post content separator
  • 是否可以为简单的类创建表单

    我只是希望能够编辑不是 ActiveRecord 类的后继类的类属性 这是我的类 app model entry rb class Entry attr accessor title body end 这是一个控制器 class Diary
  • 惰性 IO - 字符串未被垃圾收集?

    我目前正在尝试将 XML 文件的内容读入Map Int Map Int String 而且效果很好 使用 HaXml 但是 我对程序的内存消耗不满意 问题似乎是垃圾收集 这是我用来读取 XML 文件的代码 type TextFile Map
  • Spring Cloud Docker - 配置服务器无法获取属性文件作为文件后端的使用

    我在获取全部内容时遇到问题特性文件来自配置服务器 in my 春季云示例 我已经和它一起工作过Docker 我只获取了 4 个属性文件 广告服务 用户服务 API网关 报表服务 而其他属性文件 eureka服务器和管理服务 无法从配置服务器
  • 如果满足条件,如何将值添加到上一行

    我想做的是 如果 b 列中的一行等于 2 那么我想将 3 添加到 a 列中前一行的值 如果不满足条件 那么我不希望更改前一行的值 然而 当我尝试此代码时 R 正在添加到后续行 我用什么替换 1 行引用并不重要 它总是添加到后续行 df a
  • 在没有自定义 ListView 的 ListActivity 中使用 setDivider 更改分隔线?

    我似乎无法使用我定义的 Drawable 获得自定义分隔线 以便在使用ListActivity并且不创建自定义ListView 这几乎就像虚拟机创建自己的ListView对我来说 与ListActivity 它使用提供默认分隔线的主题 如果
  • 如何在 VS Code 中编辑现有的 azure 函数

    到目前为止 在我发现的有关使用 Visual Studio 代码的 Azure 函数的所有教程中 它们都是关于创建和部署的 我只是想知道如何在 VS Code 中打开现有的 azure 函数 修改它并重新部署它 那可能吗 I can ope
  • 可以使 ctag 遵循 #include 指令吗?

    我正在尝试在我的 Makefile 中创建一个目标来自动创建tags使用 ctags 文件 我有一个源文件列表 cpp 文件 但我没有所有头文件的列表 我使用g MM创建标头依赖项列表 我本以为 ctags 会遵循任何 include生成标
  • 如何通过参考id获取主题

    我需要从主题中提取默认值 但不是从当前主题中提取 我知道我可以从当前主题中获取属性 如下所示 TypedValue typedValue new TypedValue Theme currentTheme context getTheme
  • 单击由 div 使用 JavaScript 制作的按钮?

    在 Google 中 用于发表评论的按钮是由 div 制成的 div class d s r tk3N6e e tk3N6e e qc Post comment div 我想我可以点击它 document getElementById 1v
  • assertRaises 失败,即使可调用也会引发所需的异常(python,unittest)

    我有以下测试代码检查函数中引发的异常 我希望测试能够通过 但是却显示失败 这是测试代码 import unittest define a user defined exception class MyException Exception
  • 在 Android 上使用 SQLite 的 AUTOINCREMENT 的开销是多少?

    在 SQLite 文档中 它包括以下内容 AUTOINCRMENT 关键字会施加额外的 CPU 内存 磁盘空间和 磁盘 I O 开销 如果不是严格需要的话应该避免 这是 通常不需要 and AUTOINCRMENT 关键字实现的行为巧妙地
  • 使用 Application Load Balancer 在 aws ECS 上进行服务发现

    我想问一下 您是否有一个微服务架构 基于Spring Boot 涉及Amazon Elastic Container Service ECS 和Application Load Balancer ALB 服务发现是由平台自动执行的 还是需要
  • 如何在 Spring MVC 控制器中应用 Spring Data 投影?

    是否可以指定projection当直接调用数据存储库方法时 这是存储库代码 请注意 我不想通过 REST 公开它 而是希望能够从服务或控制器调用它 RepositoryRestResource exported false public i