Как избежать привязки NPE к возвращаемому значению при выдаче исключения? - PullRequest
0 голосов
/ 23 октября 2019

У меня сейчас проблема с SonarQube. У меня есть служба валидатора (которая проверяет, содержит ли DTO, которое я получаю через API, нулевые значения в объекте Double и String (не примитив).

Когда я использую сервис валидатора в приведенном ниже методе, который выбирает данныеСонар упоминает, что существует возможное отклонение NullPointerException, и, если честно, я не знаю, как его преодолеть. Я пытался вызвать метод в блоке try catch, но он все еще выделяется в Sonar.

Редактировать: точное сообщение от сонара: Возможная разыменование нулевого указателя в sendEmployeeRequest (EmployeeRequestDTO, HttpHeaders) из-за возвращаемого значения вызываемого метода.

        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;
    }

Редактировать: решение @Willem сработало, нижекод для ссылки и нить, найденная @Willem. Почему FindBugs игнорирует мою проверку на ноль?

    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 Ответ

0 голосов
/ 23 октября 2019

Изменение:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...