当前位置: 首页 > 知识库问答 >
问题:

如何避免在抛出异常时延迟返回值的NPE?

潘泰
2023-03-14

我现在和索纳库贝有矛盾。我有一个validator服务(它检查我通过API接收的DTO是否在Double和String对象(不是原语)中不包含空值)。

        validateNotNull(employeeResponseDTO.getGetSalary(), "Salary");
        validateNotNull(employeeResponseDTO.getBonus(), "Bonus");
        validateNotNull(employeeResponseDTO.getAge, "Age");

    }

    private void validateNotNull(final Object o, final String fieldName) {
        if (o == null) {
            throw new HRServiceException(MessageFactory.getExceptionByMessage(ERROR_TYPE, fieldName));
        }
    }
}
    public EmployeeResponseDTO sendEmployeeRequest(EmployeeRequestDTO employeeRequestDTO, HttpHeaders headers) {
        HttpEntity<EmployeeRequestDTO> entity = new HttpEntity<>(employeeDTO, prepareHeaders(requestHeaders));
        ResponseEntity<EmployeeRequestDTO> response = restTemplate.postForEntity(employeeServiceURL, entity, EmployeeResponseDTO.class);
        EmployeeResponseDTO employeeResponseDTO = new EmployeeResponseDTO();
        if (response.hasBody() && response.getBody() != null) {
            employeeResponseDTO = response.getBody();
            logger.info(SystemMessages.RESPONSE_RECEIVED);
            employeeValidator.validateEmployee(employeeResponseDTO);
        }
        return employeeResponseDTO;
    }
    public EmployeeResponseDTO sendEmployeeRequest(EmployeeRequestDTO employeeRequestDTO, HttpHeaders headers) {
        HttpEntity<EmployeeRequestDTO> entity = new HttpEntity<>(employeeDTO, prepareHeaders(requestHeaders));
        ResponseEntity<EmployeeRequestDTO> response = restTemplate.postForEntity(employeeServiceURL, entity, EmployeeResponseDTO.class);
        EmployeeResponseDTO employeeResponseDTO = response.getBody(); 
        if (employeeResponseDTO != null) {
            logger.info(SystemMessages.RESPONSE_RECEIVED);
            employeeValidator.validateEmployee(employeeResponseDTO);
        }
        return employeeResponseDTO;
    }

共有1个答案

伯庆
2023-03-14

更改:

if (response.hasBody() && response.getBody() != null) {
    employeeResponseDTO = response.getBody();
    logger.info(SystemMessages.RESPONSE_RECEIVED);
    employeeValidator.validateEmployee(employeeResponseDTO);
}

致:

if (response.hasBody() && response.getBody() != null) {
    employeeResponseDTO = response.getBody();
    logger.info(SystemMessages.RESPONSE_RECEIVED);
    if(employeeValidator == null)
        throw new NullPointerException();
    employeeValidator.validateEmployee(employeeResponseDTO);
}
 类似资料:
  • 我有下面的科特林协程代码。< code>doWorkAsync是正常(非挂起)函数,它返回< code>Deferred 我不知道如何在< code>doWorkAsync函数中使用< code>delay。 我正在使用kotlin协程版本。

  • 我刚开始学习Go,我对Go博客中使用defer更改命名返回值的一个示例感到困惑--defer、Panic和recover。 我在下面的代码中进行了测试,在函数中,它返回1,因为它不是上面提到的“没有参数的返回语句”。 我的问题是,在第一个示例中,周围的函数c有一个命名的返回值i,但是函数使用,在第二个示例中,我们可以看到,无论是什么值,它都应该返回1。但是为什么在更改延迟函数后,函数返回的值,而不

  • 我正在尝试正确地使用ByteBuffer和BigEndian字节顺序格式。。 我有几个字段,我试图把它存储在Cassandra数据库之前放在一个单一的ByteBuffer中。 我将要写入Cassandra的字节数组由三个字节数组组成,如下所述- 现在,我需要快速压缩attributeValue数据,然后再将其存储在Cassandra中- 现在,我将编写,和snappy压缩的一起组成一个单字节数组,

  • 在你可以捕获异常之前,一些代码必须抛出一个异常。任何代码都可能会抛出异常:您的代码,来自其他人编写的包(例如Java平台附带的包)或Java运行时环境的代码。无论是什么引发的异常,它总是通过 throw 语句抛出。 您可能已经注意到,Java平台提供了许多异常类。所有类都是Throwable类的后代,并且都允许程序区分在程序执行期间可能发生的各种类型的异常。 您还可以创建自己的异常类来表示在您编写

  • 问题内容: 更新记录时,我反复出现锁定超时超出异常的情况。 我正在使用Java Struts 2.1 Hibernate配置。使用的数据库是MYSQL。 任何人都知道如何解决它。 问题答案: 这里有一些建议: “ 锁定等待超时 ”通常发生在事务正在等待要更新的数据行上,而该行已被某些其他事务锁定时。 在大多数情况下,问题出在数据库方面。可能的原因可能是表格设计不当,数据量大,约束等。 请查看这个详

  • 我有以下方法: 它在内部调用: 第二个方法有一个try/catch persistenceException。问题是事务回滚,然后到达PersistenceException。 编辑4-更多信息: 1)从apply中删除@transactional,将@transaction仅保留在此异常的applyLog结果上: javax.persistence.persistenceException:or