带有软删除的 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 from User where exclude_flag =false; 【参考方案1】:

最好的方法是在用户表中创建一个新列作为 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 错误

spring boot rest webservice,如何改进干净的代码?

带有HTML文件的Spring Boot

spring boot项目之登出删除缓存session至redis和cookies