Два возможных способа решения этой проблемы. Вам нужно либо изменить метод обслуживания, чтобы он принимал dto, а не сущность, либо создать класс @Component
, который реализует Converter , переопределить метод convert и тут же внести необходимые изменения в поле @Autowire
GenericConversionService в вашем контроллере и вызовите genericConversionService.convert(userDto, User.class);
Преобразователь должен выглядеть следующим образом:
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
@Component
public class UserDtoToUser implements Converter<UserDto, User> {
@Override
public User convert(UserDto source) {
User user = new User();
// user.set ..... for all necessary fields
return user;
}
}
РЕДАКТИРОВАТЬ
Если вы хотите проверить достоверность полей, которые вы получаете, вы можете просто использовать следующие аннотации, чтобы убедиться, что ваши данные верны: @ NotBlank - это проверяет, является ли поле пустым или пустым строка, @ NotNull - это проверяет, является ли поле пустым, @ NotEmpty - это проверяет, является ли поле нулевым или пустой коллекцией. Важно помнить - вы должны добавить аннотацию @Valid перед объектом, который вы хотите проверить (примечание - в случае вложенных объектов вам также необходимо добавить его в поля вашего объекта), чтобы он выглядел следующим образом @RequestBody @Valid UserDto userDto,
А затем для dto это должно выглядеть примерно так:
import java.util.List;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
public class UserDto {
@NotNull
private Integer id;
@NotBlank
private String username;
@NotBlank
private String password;
@NotEmpty
private List<String> roles;
}
Измените поля на то, что есть в вашем dto, конечно. Также, если вам нужно сделать больше проверок, вы можете добавить ряд других аннотаций проверки.