Spring boot 如何在使用findBy时忽略提取的特定列。。在JPA中
我有一个Spring boot 如何在使用findBy时忽略提取的特定列。。在JPA中,spring-boot,spring-data-jpa,spring-data,Spring Boot,Spring Data Jpa,Spring Data,我有一个User实体,其中包含所有用户数据,包括密码散列。我还有一个APIgetUserDetails,它执行一个简单的userRepository.findById(id)来获取用户的所有数据。但是,在这个过程中,它还返回我不想返回的密码散列 移除密码散列的一种方法是在获取所有数据后将其从服务层移除。像这样- fun getUserDetails(id: Long): Optional<User> { val user: Optional<User> =
User
实体,其中包含所有用户数据,包括密码散列。我还有一个APIgetUserDetails
,它执行一个简单的userRepository.findById(id)
来获取用户的所有数据。但是,在这个过程中,它还返回我不想返回的密码散列
移除密码散列的一种方法是在获取所有数据后将其从服务层移除。像这样-
fun getUserDetails(id: Long): Optional<User> {
val user: Optional<User> = userRepository.findById(id)
user.get().password = ""
return user
}
{
"id": 4,
"roles": "ADMIN",
"userName": "user3",
"emailId": "hello@outlook.com",
"password": "",
"phoneNumber": "1234",
"organisationName": "test",
"isActive": true
}
密码值已删除,但密钥仍然存在。我也想把它处理掉
有没有其他更适合JPA的方法可以用来实现上述结果?您可以添加名为DTO的新层,并使用著名的库
modelmapper
将此添加到pom.xml中
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.5</version>
</dependency>
然后创建类UserDto作为示例
public class UserDto {
private Long id;
String username;
// standard getters and setters
private UserDto convertToDto(User user) {
UserDto userDto = modelMapper.map(user, UserDto);
return userDto;
}
}
在控制器或服务中
return convertToDto(userRepository.findById(id)); // wil return userDto
希望有用。您可以添加名为DTO的新层,并使用著名的库
modelmapper
将此添加到pom.xml中
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.5</version>
</dependency>
然后创建类UserDto作为示例
public class UserDto {
private Long id;
String username;
// standard getters and setters
private UserDto convertToDto(User user) {
UserDto userDto = modelMapper.map(user, UserDto);
return userDto;
}
}
在控制器或服务中
return convertToDto(userRepository.findById(id)); // wil return userDto
希望有用。在字段上使用
@get:JsonIgnore
跳过响应中的序列化
显然,您不需要在响应中发送密码散列。您需要在服务中使用密码,它在给出序列化响应时被忽略。在字段上使用
@get:JsonIgnore
跳过响应中该密码的序列化
显然,您不需要在响应中发送密码散列。您在服务中需要密码,它只是在给出序列化响应时被忽略。但这不会在所有查询中忽略它吗?那我什么时候真的需要大麻呢?这很有效。请把这个作为一个答案,我会把它标记为正确的。但这不会忽略所有的疑问吗?那我什么时候真的需要大麻呢?这很有效。请把这个作为答案,我会把它标对的。我面临一个问题。我的
POST
请求(添加用户)失败,因为在保存数据时密码字段也被忽略。工作,我面临一个问题。我的POST
请求(添加用户)失败,因为在保存数据时密码字段也被忽略。作品