【问题标题】:How should I use FindOne with Spring我应该如何在 Spring 中使用 FindOne
【发布时间】:2019-03-02 00:51:54
【问题描述】:

我刚开始通过阅读 Spring Boot in Action 一书开始学习 Spring Boot,我正在复制书中的示例,尝试自己运行它们,但我在使用 findOne 时遇到了问题。该项目应该是一个简单的阅读列表。 这是代码:

界面:

public interface ReaderRepository extends JpaRepository<Reader, String> {
}

Reader 类:

@Entity
public class Reader implements UserDetails {
    private static final long serialVersionUID = 1L;

    @Id
    private String username;
    private String fullname;
    private String password;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getFullname() {
        return fullname;
    }
    public void setFullname(String fullname) {
        this.fullname = fullname;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    // UserDetails methods
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return Arrays.asList(new SimpleGrantedAuthority("READER"));
    }
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }
    @Override
    public boolean isEnabled() {
        return true;
    }
}

安全配置

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private ReaderRepository readerRepository;
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/").access("hasRole('READER')")
                .antMatchers("/**").permitAll()
                .and()
                .formLogin()
                .loginPage("/login")
                .failureUrl("/login?error=true");
    }

    @Override
    protected void configure(
            AuthenticationManagerBuilder auth) throws Exception {
        auth
                .userDetailsService(new UserDetailsService() {
                    @Override
                    public UserDetails loadUserByUsername(String username)
                            throws UsernameNotFoundException {
                        return readerRepository.findOne(username);
                    }
                });
    }
}

还有错误:

error-image

我希望有人可以帮助我,因为我迷路了。 谢谢。

【问题讨论】:

  • 检查您在 ReaderRepository 上的导入,您可能导入了错误的“Reader”
  • 代码似乎没问题。正如@JorgeC 建议的那样,只需检查您的导入即可。也许你可以执行干净的构建。
  • 感谢您的回答。我改变了我的导入,仍然是同样的错误。当我尝试构建时,出现此错误:(38, 48) java: method findOne in interface org.springframework.data.repository.query.QueryByExampleExecutor cannot be applied to given types;必需:org.springframework.data.domain.Example 找到:java.lang.String 原因:无法推断类型变量 S(参数不匹配;java.lang.String 无法转换为 org.springframework.data .domain.Example)
  • 您使用的是哪个 Spring Boot 版本?
  • 我使用的是 Spring Boot 2.0.5

标签: java spring-boot spring-data-jpa


【解决方案1】:

java: method findOne in interface org.springframework.data.repository.query.QueryByExampleExecutor<T> cannot be applied to given types; required: org.springframework.data.domain.Example<S> found: java.lang.String reason: cannot infer type-variable(s) S (argument mismatch; java.lang.String cannot be converted to org.springframework.data.domain.Example<S>)

这是非常直接的。您需要在此处传递 Example 对象。这是一个代码。

Reader  r = new Reader().
r.setUserName("somename");

readerRepository.findOne(Example.of(r));

【讨论】:

  • 谢谢,它也不起作用。我用 getOne 而不是 findOne
猜你喜欢
  • 2016-11-13
  • 1970-01-01
  • 2016-08-05
  • 2015-08-07
  • 1970-01-01
  • 2015-09-06
  • 2021-12-04
  • 1970-01-01
  • 2021-10-25
相关资源
最近更新 更多