java - 如何使用 Spring Boot 从 Class 中只返回少数类型?
问题描述
我有一个包含用户信息的类,包括密码字段。当用户登录时,它将返回类中的所有内容,包括密码。除了密码或仅保留在数据库中的任何重要数据外,我如何不从课堂上返回所有内容。
我尝试使用 Map 这也返回了我想要的方式,但我希望是否有比 Map 更容易或更快的方法。
很少有答案建议使用 JsonIgnore 和瞬态。如果我使用这两种方法,我将无法登录。因为我需要密码才能登录。
我的 POJO 课程
@Entity
public class Users {
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "firstname")
private String firstName;
@Column(name = "lastname")
private String lastName;
@Id
@Column(name = "username")
private String username;
@Column(name = "email")
private String email;
@Column(name = "role")
private String role;
@Column(name = "password")
private String password;
回购类
public interface UsersRepository extends CrudRepository<Users,
String> {
public Users findByUsername(String username);
}
这是休息 API
@GetMapping("/users/{username}")
public Map<String, Object> usersCheck(@PathVariable String
username) {
Map<String, Object> addUser = new HashMap<>();
Users user = userRepo.findByUsername(username);
addUser.put("email", user.getEmail());
addUser.put("firstName",user.getFirstName());
"
"
return addUser;
}
有没有比地图更好的方法。任何建议都会有所帮助。
解决方案
实际上在 jpa 查询中有一种方法可以只返回特定的字段,这样您就可以在获取结果时直接使用。
但是,如果您不想干扰 findByUsername 方法,则只需创建 User 类的对象并仅设置所需的字段。
您当前使用的方法也是可行的解决方案。
推荐阅读
- r - 使用 VGLM 将零截断负二项式拟合到某些数据集失败
- mysql - SQL:如何按降序中的属性排序,但它的第二个字符需要升序
- python - Pandas 如何让我的专栏将新价格附加到标价,持有或什么都不做时保持相同的列表,全部出售为 Nan=N
- php - 试图挂钩 rest_insert_user 以向新用户添加额外的元数据
- javascript - antd select 占位符值不显示
- javascript - Expo start 在 Android 设备上永远显示“Starting Metro Bundler”
- spring-boot - 应用程序已由更新版本的 Java Runtime(类文件版本 55.0)编译,此版本最高为 52.0
- vba - 在阅读窗格中更改为不同的邮件时触发 VBA 代码
- objective-c - iOS 14 上的 NSNumberFormatter 错误
- c# - 我们是否应该等待这行代码,因为我们没有在这里访问数据库?