java - 如何从 Json 接收数组到 Set在 Java 中?
问题描述
基本上我的 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
好吧,如您所见,角色是一个包含“Manager”和“Admin”的 Array(2)
现在我希望我的 Java spring 后端可以把这个角色变成一组字符串,然后我有一个
注册请求类:
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 字段映射到类字段?问题可能就在那里。此外,您的班级中的角色字段似乎没有任何注释(与其他字段不同),这会影响它吗?
推荐阅读
- swift - Xcode Swift,访问内部数据
- date - Stata:两个日期之间的月数
- javascript - 如何将带有单个输入的日期范围添加到 react-datepicker
- javascript - 分离成新组件时无法渲染 Vue 组件
- sql - sql从另一个表应用多个过滤器
- javascript - 从最喜欢到最不喜欢对我的旅行进行排序
- javascript - Ionic ion-range 不会如此更新值
- r - 如何仅使用基 R 创建二叉树?
- javascript - 如何同时调用 l 两个 javascript 函数对同一数据列执行操作?
- security - Back4app API 密钥