У меня сейчас проблема с 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;
}