Метод поиска в контроллере Spring не работает - PullRequest
0 голосов
/ 16 апреля 2020

Помогите решить проблему с поиском

Метод поиска в контроллере Spring не работает

Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 500) , Пользователь типа не найден для типа Пользователь! org.springframework.data.mapping.PropertyReferenceException: пользователь свойства не найден для типа User!

Когда я пытаюсь выполнить поиск пользователей по имени пользователя, я получаю сообщение об ошибке со ссылкой на строку в UserService:

return userRepo.findByUsername (search, pageable);

UserRepo:

public interface UserRepo extends CrudRepository<User, Long> {
User findByUsername(String username);

User findByActivationCode(String code);

Page<UserDto> findAll(Pageable pageable);

Page<UserDto> findByUsername(@Param("username") String search, Pageable pageable);

}

UserServise:

@Service
public class UserService implements UserDetailsService {
@Autowired
private UserRepo userRepo;

public Page<UserDto> userList(Pageable pageable, String search) {
    if (search != null && !search.isEmpty()) {
        return userRepo.findByUsername(search, pageable);
    } else {
        return userRepo.findAll(pageable);
    }
}

Dto:

public class UserDto {
    private Long id;
    private String firstname;
    private String lastname;
    private String username;
    private String email;
    ...

    public UserDto(User user) {
        this.id = user.getId();
        this.firstname = user.getFirstname();
        this.lastname = user.getLastname();
        this.username = user.getUsername();
        this.email = user.getEmail();
        ...
    }... + getters

Контроллер:

@GetMapping("/users")
public String readAllUsers(
        @RequestParam(required = false, defaultValue = "") String search,
        @PageableDefault(sort = {"id"}, direction = Sort.Direction.DESC) Pageable pageable,
        Model model) {
    Page<UserDto> page = userService.userList(pageable, search);
    model.addAttribute("url", "/admin/users");
    model.addAttribute("page", page);
    model.addAttribute("search", search);
    model.addAttribute("roles", Role.values());
    return "adminUsers";
}

Форма:

<form action="/admin/users" method="get" class="d-flex justify-content-center">
            <!-- Default input -->
            <input type="search" name="search" value="${search?ifExists}"
                   placeholder="Enter you query" aria-label="Search" class="form-control">
            <button class="btn btn-primary btn-sm my-0 p" type="submit">
                <i class="fas fa-search"></i>
            </button>

        </form>

Полный текст Ошибка: https://drive.google.com/file/d/1cA0Gs1CKECHMZkgzlMqeHbK5WZLatowk/view?usp=sharing

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Ваш репозиторий работает с User, он не может вернуть Page<UserDto> ... только Page<User>. Вам нужно будет сопоставить User с UserDto после того, как оно будет возвращено хранилищем.

0 голосов
/ 16 апреля 2020

вместо этого: Page, заменить на Page.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...