具有安全性表达式的@Query上的类型Expectation不匹配

时间:2019-04-23 13:17:50

标签: spring spring-data

我目前正在尝试将@Query与spring安全表达式一起使用,以匹配与登录用户属于同一地区/位置的任何用户。

我正在使用以下代码来实现这一目标

@Override
@Query(value = "select u from User u where u.region in :#{principal.region}")
Page<User> findAll(Pageable var1);

“我的用户”表与以下地区相关联

@ManyToMany( mappedBy = "users")
private List<Region> region = new ArrayList<>();

“我的地区”表与用户具有以下关联

@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "region_users", joinColumns = @JoinColumn(name = "region_id", referencedColumnName= "id"),
        inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id")
)
private List<User> users = new ArrayList<>();

我的自定义主体对象具有以下区域字段

private List<Region> region;

public UserPrincipal(Long id, String username, String password,
                     Collection<? extends GrantedAuthority> authorities, Role role, List<Region> region) {
    this.id = id;
    this.username = username;
    this.password = password;
    this.authorities = authorities;
    this.role = role;
    this.region = region;
}

使用以下get方法

public List<Region> getRegion() { return this.region; }

当我向使用覆盖的find所有方法的api端点发出请求时,出现以下异常

原因:java.lang.IllegalArgumentException:参数值[com.example.ReportTool.model.Region@18ab655a]与预期的类型[java.util.Collection(n / a)]不匹配

有人可以帮助我解决这个问题吗?如果这个问题太含糊,也请让我知道。

0 个答案:

没有答案