gpt4 book ai didi

java - 方法返回 null 时的处理

转载 作者:行者123 更新时间:2023-12-02 11:06:48 26 4
gpt4 key购买 nike

我开始使用 Spring Boot 和 Java,我想知道如何处理方法返回 null 的情况。

@Entity
@Table(name = "users")
@Data
public class User implements UserDetails {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id", nullable = false, updatable = false)
private Long id;

@Column(name = "username", nullable = false, unique = true)
private String username;

@Column(name = "password", nullable = false)
private String password;

@Column(name = "enabled", nullable = false)
private boolean enabled;
......

}


@Service("userService")
public class UserService implements UserDetailsService {

@Autowired
private UserRepository userRepository;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return userRepository.findOneByUsername(username).orElseThrow(() -> new UsernameNotFoundException("User not found"));
}
}

UserService中,我想知道如何处理方法findByUsername返回null的情况。我应该使用这样的东西。现在,当找不到用户时,它会抛出异常。

UserDetails u = userRepository.findOneByUsername(username);
if(u === null)
return...
else
return u;

最佳答案

我理解了这个问题,所以你有这个:

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return userRepository.findOneByUsername(username)
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
}

但 findOneByUsername() 可以返回 null。在这种情况下,有一些选择

  • 使用 Optional.ofNullable(userRepository.findOneByUsername(username)) 会将 null 结果强制传递给Optional.empty,这样您就可以保留现在的构造:

 

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Optional.ofNullable(userRepository.findOneByUsername(username))
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
}
  • 显式检查 null,如果发生则抛出新的 UsernameNotFoundException("User not found")

  • 让空指针异常发生。在某些情况下这是可行的,但由于您显然希望在未找到用户时抛出 UsernameNotFoundException,因此它在这里不起作用。

  • 更改底层代码以在未找到结果时引发异常。这可能是我的选择,因为空值通常会带来麻烦。一些流行的框架如Spring JDBCSpring Data做这个。由于您已经在使用 Spring,我强烈建议您遵循相同的模式。

TLDR;如果找不到对象,您可以更改底层代码以引发异常吗?

关于java - 方法返回 null 时的处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50897782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com