【问题标题】:The method for searching in the Spring controller does not workSpring控制器中搜索的方法不起作用
【发布时间】:2020-07-30 05:05:58
【问题描述】:

请帮忙解决搜索问题

Spring控制器中搜索的方法不起作用

出现意外错误(类型=内部服务器错误,状态=500)。 未找到用户类型的属性用户! org.springframework.data.mapping.PropertyReferenceException: 找不到用户类型的属性用户!

当我尝试按用户名搜索用户时,我收到一个错误,指的是 UserService 中的一行:

return userRepo.findByUsername(搜索,可分页);

用户回购:

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);

}

用户服务:

@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

【问题讨论】:

    标签: java html jpa model-view-controller


    【解决方案1】:

    您的存储库正在使用User,它不能返回Page&lt;UserDto&gt;...只能返回Page&lt;User&gt;User 被存储库返回后,您需要将其映射到 UserDto

    【讨论】:

    • 能写的详细一点吗?刚学Spring,不太懂。
    • 有必要将页面准确地转移到Dto,这是不可能的(
    • 将返回类型改为Page&lt;User&gt;
    • 以及如何返回Dto?
    • 你可以map it
    【解决方案2】:

    而不是这个: Page ,替换为 Page。

    【讨论】:

      猜你喜欢
      • 2017-09-21
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 2015-10-07
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多