带有软删除的 Spring Boot GET 方法如何在服务 impl 中添加另一个异常
Posted
技术标签:
【中文标题】带有软删除的 Spring Boot GET 方法如何在服务 impl 中添加另一个异常【英文标题】:Spring Boot GET method with soft delete how to add another exception in service impl 【发布时间】:2022-01-20 17:59:27 【问题描述】:我是 Java 和 Spring Boot 的初学者,我实现了一个具有 CRUD 功能的用户类。但是现在我需要添加如果 excludeFlag 为 True,则无法显示或修改用户的功能,因此我需要在这些 CRUD 操作之前添加标志是否为 true 的测试。
当下的密码
UserServiceImpl.java
@Override
public UserResponse getAllUsers(int pageNo, int pageSize, String sortBy, String sortDir)
Sort sort = sortDir.equalsIgnoreCase(Sort.Direction.ASC.name()) ? Sort.by(sortBy).ascending()
: Sort.by(sortBy).descending();
Pageable pageable = PageRequest.of(pageNo, pageSize, sort);
Page<User> users = userRepository.findAll(pageable);
List<User> listOfUsers = users.getContent();
List<UserDto> content= listOfUsers.stream().map(user -> mapToDTO(user)).collect(Collectors.toList());
UserResponse userResponse = new UserResponse();
userResponse.setContent(content);
userResponse.setPageNo(users.getNumber());
userResponse.setPageSize(users.getSize());
userResponse.setTotalElements(users.getTotalElements());
userResponse.setTotalPages(users.getTotalPages());
userResponse.setLast(users.isLast());
return userResponse;
@Override
public UserDto getUserById(long id)
User user = userRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("User not found"));
//any other addition like:
//User user = userRepository.filterByExclusionFlag(true).orElseThrow(() -> new ResourceNotFoundException("User not found"));
//results in errors like the function can't throw exception and I added the filterByExclusionFlag in UserRepository. Have no idea how to add this feature on UserService
return mapToDTO(user);
【问题讨论】:
能否请您添加错误日志?还是编译时错误? 那是哪个 Spring Data? Spring Data JPA 还是其他? 最好把完整的代码和错误日志复制到这里。另外,我不知道你到底想要什么抑制剂方法,但它应该写在存储库中。例如,如果您想检查是否存在可以通过existsBy
访问的内容,或者如果您想检查布尔结果IsFalse
可能会对您有所帮助。
最好的方法是在用户表中创建一个新列作为 exclude_flag 并使用构造函数 DTO 投影而不是内置 findById 与 @Query 具有 exlusionFlag 作为值 false。保存每个用户与默认值标志为错误的。您的示例查询将是这样的: select 最好的方法是在用户表中创建一个新列作为 exclude_flag,并使用构造函数 DTO 投影而不是内置 findById,@Query 的 exlusionFlag 值为 false。
将每个用户的 Flag 的默认值保存为 false。您的示例查询将如下所示:select needed columns from User where exclusion_flag =false
。
对于您的修改 API (PUT) ,要求客户端传递从上述 (GET) API 获取的值以传递请求。请求参数中传递的标志可帮助您识别是否可以修改用户。
【讨论】:
以上是关于带有软删除的 Spring Boot GET 方法如何在服务 impl 中添加另一个异常的主要内容,如果未能解决你的问题,请参考以下文章
Spring/Boot - JWT 未在 GET 请求中获取
Spring Boot - 如何通过带有查询参数的 url 发送 POST 请求并将响应存储在方法中?
在带有 Angular 的 Spring Boot 中启用了 Cors,但仍然出现 cors 错误