Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用枚举列出角色?_Java_Spring Boot_Hibernate - Fatal编程技术网

Java 如何使用枚举列出角色?

Java 如何使用枚举列出角色?,java,spring-boot,hibernate,Java,Spring Boot,Hibernate,我要添加用户的POST请求示例:Vasya,Petrenko,910382741,vasya@mail.ru,ADMIN前4个属性有效,但我不知道如何为角色创建字段 我的数据库是否正确构建?我使用Json发送添加用户的请求,用户与角色的关系是多对多的。我不知道如何发送角色,我需要用户中的另一个属性 UserController private UserRepository userRepository; public UserController(UserRepository use

我要添加用户的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";
}

问题是您正在设置
roles=null
,然后对其进行方法调用。首先需要调用
valueOf
获取角色对象。如果角色不存在,则应为null。以下几点应该行得通

@PostMapping
public String userPostAdd(@ModelAttribute User user) {
    List<Roles> rolesList = new ArrayList<>();
    for (Role role : user.getRole()){
        Roles r = Roles.valueOf(role.getName().toUpperCase());
        if (r != null){
            rolesList.add(r)
        } 
    }
    
    if (!rolesList.isEmpty()){
       userRepository.save(user);
    } 
    return "Add user";
}
@PostMapping
公共字符串userPostAdd(@modeldattribute User){
列表角色列表=新建ArrayList();
for(角色:user.getRole()){
Roles r=Roles.valueOf(role.getName().toUpperCase());
如果(r!=null){
角色列表。添加(r)
} 
}
如果(!rolesList.isEmpty()){
userRepository.save(用户);
} 
返回“添加用户”;
}

你能这样做吗?请注意,该角色在此代码中称为Authority。另请注意,这是在一个单独的分支
单模块no keydepate
@gtiwari333中。一般来说,我已经准备好了ENUM类,但我不知道如何确切地检查角色。他找不到它的位置。它的代码对我来说相当复杂,因为有太多的文件夹和分支没有那么复杂:)你能分享你的代码以便我们可以查看吗?@gtiwari333是的:我甚至没有注意到它是你的存储库)我想说我对此感到非常惊讶,我喜欢编写代码。我梦想并努力在将来做同样的事情)在您的角色实体类中,这样做是为了使用enum
@Enumerated(EnumType.STRING)私有角色名称无法解析“角色”中的方法“toUpperCase”。我有权限而不是角色,我们应该保存用户,而不是requestUserDetails,因为我知道itI再次更新。此外,您使用的类和变量名非常模糊。为什么要将枚举定义为角色而不是RoleEnum,对于定义为
Role
的角色列表也是一样的。这很让人困惑,让社区很难帮助你避免困惑,我现在改变了权威,而不是角色。我有;重新登录后丢失。添加(r);程序仍然不工作,返回错误无法解析“Authority”中的方法“toUpperCase”。IDEA建议在Authority中创建一个toUpperCase方法,那么为什么不更新代码呢?我仍然不确定您是否将
角色
角色
更改为
权限
?另外,您是否在
角色
类中定义了任何getter?我的数据库构建是否正确?我使用Json发送添加用户的请求,用户与角色的关系是多对多的。我不知道如何发送角色,我需要用户中的另一个属性?代码已更新。
@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;
    }
}
@PostMapping
public String userPostAdd(@ModelAttribute User user) {
    List<Roles> rolesList = new ArrayList<>();
    for (Role role : user.getRole()){
        Roles r = Roles.valueOf(role.getName().toUpperCase());
        if (r != null){
            rolesList.add(r)
        } 
    }
    
    if (!rolesList.isEmpty()){
       userRepository.save(user);
    } 
    return "Add user";
}