【发布时间】:2020-09-25 18:28:41
【问题描述】:
我将为添加用户而发出的 POST 请求示例:Vasya, Petrenko,910382741, vasya@mail.ru, ADMIN 前 4 个属性有效,但我不明白如何为角色创建字段。
我的数据库是否正确构建?我使用Json发送请求添加用户,用户与角色的关系是多对多的。我不明白如何发送角色,我需要用户中的另一个属性?
UserController
private UserRepository userRepository;
public UserController(UserRepository userRepository) {
this.userRepository = userRepository;
}
@PostMapping
public String userPostAdd(@RequestBody User user) {
List<Authority> rolesList = new ArrayList<>();
for (Role role : user.getRole()){
Authority r = role.getName();
if (r != null){
rolesList.add(r);
}
}
if (!rolesList.isEmpty()){
userRepository.save(user);
}
return "Add user";
}
实体角色
@ToString
@Entity
@Table(name = "role", schema = "task")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name", nullable = false)
@Enumerated(EnumType.STRING)
private Authority name;
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "role")
private List<User> users;
getter,setter...
}
用户:
@ToString
@Entity
@Table(name = "user", schema = "task")
public class User {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@ManyToMany
@JoinTable(name = "user_role",
joinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"))
private List<Role> role;
@OneToMany(mappedBy = "user")
private Set<Contract> contract;
@Column(name = "surname", nullable = false)
private String surname;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "email", nullable = false, unique = true)
private String email;
@Column(name = "phone", nullable = false, unique = true)
private Integer phone;
getter,setter...
}
枚举
public enum Authority {
TENANT ("tenant"),
LANDLORD ("landlord"),
ADMIN ("admin");
private final String name;
private Authority(String s) {
name = s;
}
public boolean equalsName(String otherName) {
return name.equals(otherName);
}
public String toString() {
return this.name;
}
}
【问题讨论】:
-
你能这样吗? github.com/gtiwari333/spring-boot-web-application-seed/tree/… 请注意,此代码中的角色称为权限。另请注意,这是在一个单独的分支中
single-module-no-keycloak -
@gtiwari333 一般来说,我已经准备了 ENUM 类,但我不知道如何检查角色。他找不到它的位置。它的代码对我来说相当复杂,因为文件夹和分支太多了
-
它没那么复杂 :) 你能分享你的代码以便我们研究吗?
-
@gtiwari333 是的:github.com/Blacit/TaskSpring 我什至没有注意到这是您的存储库)我想说我对此感到非常惊讶,我喜欢编写代码。我梦想并努力在未来做同样的事情)
-
在你的 Role 实体类中使用枚举
@Enumerated(EnumType.STRING) private Roles name;
标签: java spring-boot hibernate