【发布时间】:2021-11-15 07:00:20
【问题描述】:
我正在尝试使用 @Valid 从这样的角度应用程序发送表单数据来验证 userDto 类:
角度形式:
this.form.append('email', this.user.email);
this.form.append('password', this.user.password);
this.form.append('firstName', this.user.firstName);
this.form.append('lastName', this.user.lastName);
this.form.append('photo', this.file.name);
this.form.append('enable', `${this.user.enable}`);
this.form.append('roles', JSON.stringify(this.user.roles));
this.form.append('file', this.file);
this.userService.createUser(this.form)
控制器类:
@PostMapping
public ResponseEntity<Object> save(@Valid UserDto userDto, @RequestPart("file") MultipartFile file) throws IOException {
service.save(userDto.convertToUser(userDto, file.getOriginalFilename()), file);
return new ResponseEntity<>(HttpStatus.CREATED);
}
UserDTO 类:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {
private Integer id;
@NotEmpty(message = "email is required")
private String email;
@NotEmpty(message = "password is required")
private String password;
@NotEmpty(message = "first name is required")
private String firstName;
@NotEmpty(message = "last name is required")
private String lastName;
private String photo;
private String enable;
private String roles;
public User convertToUser(UserDto userDto, String photoName) {
User user = new User();
ObjectMapper mapper = new ObjectMapper();
try {
List<Role> rolesDto =
Arrays.asList(mapper.readValue(userDto.getRoles(),Role[].class));
Set<Role> roles = Set.copyOf(rolesDto);
user.setId(this.id);
user.setEmail(this.email);
user.setPassword(this.password);
user.setFirstName(this.firstName);
user.setLastName(this.lastName);
user.setPhoto(photoName);
user.setEnable(Boolean.parseBoolean(this.enable));
user.setRoles(roles);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return user;
}
}
但是如果我传递一个空的表单数据,那么引发异常的类就是我的 User 类,我希望 UserD 抛出异常而不是 User 类。
我尝试将 @RequestBody 注释与 @Valid 一起使用,但我使用的是 angular 而不是 json 格式的表单数据。
有没有办法在 Spring Boot 中验证表单数据,将表单传递给没有 @Entity 注释的 DTO 类?
【问题讨论】:
标签: java angular spring-boot