【发布时间】:2021-07-18 04:13:30
【问题描述】:
基本上我的 json 帖子是这样的:
{username: "2kzhuanyonghao2", password: "qqq542417349", confirmPassword: "qqq542417349", firstname: "peiran", lastname: "liu", …}
confirmPassword: "qqq542417349"
email: "liupeiran9324@gmail.cokm"
firstname: "peiran"
lastname: "liu"
password: "qqq542417349"
phone: "234324234322"
roles: Array(2)
0: "Manager"
1: "Admin"
length: 2
__proto__: Array(0)
username: "2kzhuanyonghao2"
__proto__: Object
好吧,你可以看到角色是一个数组(2),其中包含“经理”和“管理员”
现在我希望我的 Java spring 后端可以把这个角色变成一个字符串集,然后我有一个
signUpRequest 类:
package com.crmbackend.payLoad.request;
import java.util.Set;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
public class SignupRequest {
@NotBlank
@Size(min = 1, max = 128)
private String username;
@NotBlank
@Size(min = 5, max = 128)
private String password;
@NotBlank
@Size(max = 128)
@Email
private String email;
@NotBlank
@Size(max = 45)
private String firstname;
@NotBlank
@Size(max = 45)
private String lastname;
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@NotBlank
@Size(max = 64)
private String phone;
private Set<String> roles;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Set<String> getRoles() {
return roles;
}
public void setRoles(Set<String> roles) {
this.roles = roles;
}
}
当我使用这个类时,我正在这样做:
Set<String> roleSetString = signUpRequest.getRoles();
每个属性都很好,除了这个角色属性,我一直为此获取 Null 值。
Here is my controller where call the signUpRequest:
@PostMapping("/signup")
public ResponseEntity<?> regietserUser(@Valid @RequestBody SignupRequest signUpRequest) {
if (userRepo.existsByUsername(signUpRequest.getUsername())) {
return ResponseEntity.badRequest().body(new ReturnMessageResponse("Error: Username is already exist!"));
}
if (userRepo.existsByEmail(signUpRequest.getEmail())) {
return ResponseEntity.badRequest().body(new ReturnMessageResponse("Error: Email is already used"));
}
User user = new User(signUpRequest.getUsername(), signUpRequest.getFirstname(), signUpRequest.getLastname(),
encoder.encode(signUpRequest.getPassword()), signUpRequest.getEmail(), signUpRequest.getPhone());
Set<String> roleSetString = signUpRequest.getRoles();
Set<Role> roles = new HashSet<>();
//if there are no roll specific
System.out.println(roleSetString);
if (roleSetString == null) {
Role userRole = roleRepo.findByName("User")
.orElseThrow(() -> new RuntimeException("Error: Role user is missing/not found"));
roles.add(userRole);
} else {
roleSetString.forEach(role -> {
switch (role) {
case "Admin":
Role adminRole = roleRepo.findByName("Admin")
.orElseThrow(() -> new RuntimeException("Error: Role Admin is not found."));
roles.add(adminRole);
break;
case "Manager":
Role managerRole = roleRepo.findByName("Manager")
.orElseThrow(() -> new RuntimeException("Error: Role Manager is not found."));
roles.add(managerRole);
break;
case "User":
Role userRole = roleRepo.findByName("User")
.orElseThrow(() -> new RuntimeException("Error: Role User is not found."));
roles.add(userRole);
break;
}
});
}
user.setRoles(roles);
userRepo.save(user);
return ResponseEntity.ok(new ReturnMessageResponse("User registered successfully!!"));
}
但是当我取出roleSetString时,它仍然返回null,这意味着getRoles()无法返回我通过json数组传递的角色值. 有什么建议吗?
【问题讨论】:
-
这不是有效的 JSON,请重试。
-
什么无效?似乎他只是在没有逗号的情况下粘贴了里面,但在其他方面是有效的。即使通过了他的程序,也只有角色属性被忽略了
-
为什么不使用列表或数组而不是单独设置和去重?
标签: java json spring spring-boot