Spring Boot 如何替换验证过程中大量嵌套的if?

cmssoen2  于 2023-03-02  发布在  Spring
关注(0)|答案(2)|浏览(197)

我正在处理一个请求的响应,我需要确保请求的格式正确,并且对于请求中的不同错误,我需要返回不同的答案。我最后做了嵌套的if语句,在第三个之后,我有点觉得它看起来很混乱,而且可能有错误。所以我来到这里是为了寻求如何修改代码以避免嵌套if语句的建议。
下面是代码:

  1. public <T> ResponseEntity<T> validateRequest(Request request) {
  2. if(agentRepository.findAgentByRequestPoint(request.getPoint()).isPresent()){
  3. if(request.getAdvanced().getFunction().equals("CheckAcc")){
  4. if(ServiceRepository
  5. .findServiceByServiceId(Long.parseLong(request.getAdvanced().getService()))
  6. .isPresent()){
  7. }else{
  8. ResponseEntity.ok((T) response.wrongCheck(1, 4);
  9. }
  10. }else{
  11. ResponseEntity.ok((T) response.wrongCheck(1, 1));
  12. }
  13. }else{
  14. return ResponseEntity.ok((T)ErrorDTO.from(bundle.getString("point.not.set")));
  15. }
  16. }
r55awzrz

r55awzrz1#

试试这个:

  1. public <T> ResponseEntity<T> validateRequest(Request request) {
  2. if(agentRepository.findAgentByRequestPoint(request.getPoint()).isEmpty())
  3. return ResponseEntity.ok((T)ErrorDTO.from(bundle.getString("point.not.set")));
  4. if(!request.getAdvanced().getFunction().equals("CheckAcc"))
  5. return ResponseEntity.ok((T) response.wrongCheck(1, 1));
  6. if(ServiceRepository.findServiceByServiceId(Long.parseLong(request.getAdvanced().getService())).isEmpty())
  7. return ResponseEntity.ok((T) response.wrongCheck(1, 4));
  8. }

我建议对变量/方法进行更多的验证或空检查,因为像request.getAdvanced().getFunction().equals("CheckAcc")request.getAdvanced().getService()这样的字段似乎容易受到NPE的攻击。
或者至少尝试捕获该方法并记录堆栈跟踪以供将来调试之用。
希望能有所帮助。

guz6ccqo

guz6ccqo2#

提高代码可读性的最佳方法是将代码拆分为不同的方法:

  1. public <T> ResponseEntity<T> validateRequest(Request request) {
  2. if (!isAgentExists(request)) {
  3. return ResponseEntity.ok((T) ErrorDTO.from(bundle.getString("point.not.set")));
  4. }
  5. if (!isRequestFunctionCorrect(request, "CheckAcc")) {
  6. return ResponseEntity.ok((T) response.wrongCheck(1, 1));
  7. }
  8. if (!isServiceExists(request)) {
  9. return ResponseEntity.ok((T) response.wrongCheck(1, 4);
  10. }
  11. // do the logic if everything is correct
  12. }
  13. private boolean isAgentExists(Request request) {
  14. return agentRepository.findAgentByRequestPoint(request.getPoint()).isPresent();
  15. }
  16. private boolean isRequestFunctionCorrect(Request request, String func) {
  17. if (request.getAdvanced() != null) {
  18. return func.equals(request.getAdvanced().getFunction());
  19. }
  20. return false;
  21. }
  22. private boolean isServiceExists(Request request) {
  23. Long serviceId = Long.parseLong(request.getAdvanced().getService());
  24. return ServiceRepository.findServiceByServiceId(serviceName).isPresent()
  25. }

在某些情况下,我添加了额外的空值检查以避免NPE。
希望对你有帮助:)

展开查看全部

相关问题