Spring Data Jpa自定义查询方法返回null,即使我在测试时使用了现有记录



我正在使用Spring Boot和Spring Data Jpa开发一个web应用程序。我想做的是编写一个自定义查询方法,在给定用户名的情况下从数据库中检索用户。这是我的AppUserRepository接口,扩展了CrudRepository接口:

@Repository
public interface AppUserRepository extends CrudRepository<AppUser,Integer>{
public AppUser findOneByUsername(@Param("username") String username);
}

这是AppUser类:

@Entity(name="appUser")
@Table(name="appUser")
public class AppUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="nume")
@NotNull
private String nume;
@Column(name="prenume")
@NotNull
private String prenume;
@Column(name="username", unique=true)
@NotNull
private String username;
@Column(name="password")
@NotNull
private String password;
@Column(name="email", unique=true)
@NotNull
private String email;
@Column(name="authorities")
@NotNull
private String authorities;
public AppUser() {
}
public AppUser(Long id, String nume, String prenume, String username, String password, String email,
String authorities) {
super();
this.id = id;
this.nume = nume;
this.prenume = prenume;
this.username = username;
this.password = password;
this.email = email;
this.authorities = authorities;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNume() {
return nume;
}
public void setNume(String nume) {
this.nume = nume;
}
public String getPrenume() {
return prenume;
}
public void setPrenume(String prenume) {
this.prenume = prenume;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAuthorities() {
return authorities;
}
public void setAuthorities(String authorities) {
this.authorities = authorities;
}
}

然后,我定义了AppUserController,在那里我实现了方法getUserByUsername

@RestController
@RequestMapping(value="/user")
public class AppUserController {
@Autowired
private AppUserRepository appUserRepository;
@RequestMapping(value="/all", method=RequestMethod.GET) 
public ResponseEntity getAllUsers() {
return new ResponseEntity((List)appUserRepository.findAll(), new HttpHeaders(), HttpStatus.OK);
}
@RequestMapping(value="/{username}", method=RequestMethod.GET)
public ResponseEntity getUserByUsername(@PathVariable("username") String username) {
return new ResponseEntity<AppUser>(appUserRepository.findOneByUsername(username), new HttpHeaders(), HttpStatus.OK);
}

当我测试该方法时,我调用http://localhost:8080/user/existingUsername其中existingUsername是我的数据库中已经存在的用户名。

问题是查询的结果始终为null,即使用户名存在。

我尝试过该方法的其他名称,如findAppUserByUsernamefindByUsername,但它们都不起作用。此外,getAllUsers方法运行良好。

更新:我已经做了一些调试,我意识到问题是我不能将整个用户名作为路径变量发送,因为它们遵循名称.姓氏模式,并且我在点后面的内容总是被忽略。

尝试将存储库方法更改为此

public List<AppUser> findByUsername(String username);

Findone将通过主键查找找到一个

尝试用/all更改uri,因为它可能有歧义像这样/name/{usename}

最新更新