I need to support with error below:
When I insert data object use RESTFUL API, I have take error throw message from Postman:
This is Class UserEntity
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class User extends BaseEntity {
@Column(nullable = false, unique = true, columnDefinition = "varchar(50)")
private String userName;
@Column(nullable = false)
private String password;
@Column(unique = true, nullable = false)
private String email;
@Column(unique = true, nullable = false)
private String phone;
@Column
private String address;
@Column
private String fullName;
@Column
private LocalDate dateOfBirth;
@ManyToMany
@JoinTable(name = "permission",
joinColumns = @JoinColumn(name = "user_id", nullable = false),
inverseJoinColumns = @JoinColumn(name = "role_id", nullable = false))
@JsonIgnore
private Set<Role> roles = new HashSet<>();
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
@JsonIgnore
private List<Blog> blogs = new ArrayList<>();
}
This is class UserSaveRequest
@Getter
@Setter
public class UserSaveRequest {
private long id;
private String userName;
private String password;
private String email;
private String phone;
private String address;
private String fullName;
private LocalDate dateOfBirth;
private List<Long> ids;
}
This is method map Object request to Object entity
public User mapToEntity(UserSaveRequest userSaveRequest){
UserValidate.validate(userSaveRequest);
String encode = PasswordHasher.hash(userSaveRequest.getPassword());
User user = new User();
BeanUtils.refine(userSaveRequest,user,BeanUtils::copyNonNull);
user.setPassword(encode);
List<Role> roles = roleRepository.findAllByIdIn(userSaveRequest.getIds());
user.setRoles(new HashSet<>(roles));
return user;
}
This is Class UserController
@RestController // để đánh dấu là API
@RequestMapping("/api")
@Data
public class UserController extends BaseController {
private final static Logger LOGGER = LoggerFactory.getLogger(UserController.class);
private final UserService userService;
private final UserMapper userMapper;
private final TokenProducer tokenProducer;
private JwtPayload createPayload(User user){
JwtPayload jwtPayload = new JwtPayload();
jwtPayload.setUserName(user.getUserName());
jwtPayload.setId(user.getId());
String roles = user.getRoles().stream().map(Role::getName).collect(Collectors.joining(","));
jwtPayload.setRole(roles);
return jwtPayload;
}
@PostMapping("/user")
@PreAuthorize("hashAnyRole('ADMIN') OR hashAnyRole('USER') OR hashAnyRole('MANAGER')")
public ResponseEntity<BaseResponse> save(@RequestBody UserSaveRequest userSaveRequest) {
userService.save(userSaveRequest, userMapper::mapToEntity);
return success();
}
}
This is interface BaseService
public interface BaseService<T, ID>{
<RQ> void save(RQ req, Function<RQ, T> transform);
}
This is abstract class AbstractServiceImpl
@Data
public abstract class AbstractServiceImpl<T, ID> implements BaseService<T, ID> {
protected final BaseRepository baseRepository;
public AbstractServiceImpl(BaseRepository baseRepository){
this.baseRepository = baseRepository;
}
@Override
public <RQ> void save(RQ req, Function<RQ, T> transform) {
T t = transform.apply(req);
baseRepository.save(t);
}
}
This is UserServiceImpl
@Service
public class UserServiceImpl extends AbstractServiceImpl<User, Long> implements UserService {
public UserServiceImpl(UserRepository userRepository){
super(userRepository);
}
}