很抱歉用这个问题打扰你,但我最终找到了一个头脚,我想知道我是否以错误的方式处理这个问题。
我想映射一个包含集合的类,org.springframework.security.core.authority.SimpleGrantedAuthority
这样我就不需要将 ORM 急切加载的它发送到 spring 安全类中。但是它的“role”属性与getter“getAuthority”相关联,这就是Orika意味着麻烦的时候。我可以强制 Orika 使用 getter 返回的值,将其放入目标类的 setter 中吗?
如果你足够关心,这里有一点我的问题的背景。我正在为应用程序使用 Spring 安全性。我有一个返回 a 的服务,org.springframework.security.core.userdetails.UserDetails
以便 spring 可以检查用户是否经过身份验证并且它具有权限。我们拥有的 UserDetail 的实现是一个名为User
. 由于此类实现org.springframework.security.core.userdetails.UserDetails
,它具有public Collection<? extends GrantedAuthority> getAuthorities();
返回该用户权限的方法。
一切都很好,除了我们User
在数据库中有这个,用休眠处理。将打开的会话保留在视图中的第一个选择。我们不希望那样。第二个选择是获取ORM,EARGER。我们也不想要那样。因此,我们决定使用 DTO,实现 UserDetail,并用 orika 映射它。就在那时,所有的地狱都崩溃了。org.springframework.security.core.GrantedAuthority
是一个接口。我们使用的具体类是org.springframework.security.core.authority.SimpleGrantedAuthority
. 这是一个晦涩而致命的映射类,因为它有一个属性名称“role”,但它的getter是“getAuthority”
public String getAuthority() {
return role;
}
看来Spring战队和Orika战队在哪里不是很要好的朋友。否则,他们会根据 java 标准命名属性,而 orika 会直接映射它。我也不愿意为这种特殊情况定义自定义映射器,这就是困扰我的地方。除了用特定类的自定义映射器替换所有“魔法”之外,是否有任何已知的方法可以强制 Orika 使用 getter 方法返回的值?