Java/오류노트

[Java/오류노트] SonarLint : A "NullPointerException" could be thrown; "getBody()" can return null.

adjh54 2023. 12. 5. 18:05
728x170
해당 글에서는 Java에서 SonarLint에서 발생하는 오류에 대한 해결방법에 대해 알아봅니다.


 

1) 문제점


💡 A "NullPointerException" could be thrown; "getBody()" can return null. 문제점

- "NullPointerException"라는 오류 메시지는 null 값을 접근하려고 할 때 발생합니다. 이 경우 "getBody()" 메소드가 null을 반환할 수 있으며, 이로 인해 예외가 발생할 수 있습니다. 이 오류는 일반적으로 초기화되지 않은 객체의 메소드나 속성에 접근하려고 할 때 또는 존재하지 않는 객체에 접근하려고 할 때 발생합니다.

- 해당 오류에서는 ResponseEntity<ApiResponseWrapper> result 값으로 제너릭 타입 형태의 ‘result’ 값에 NullPointException이 발생할 수 있다는 SonarLint의 에러입니다. 해당 오류는 SonarLint에서는 경고 메시지로 나오지만 SonarQube에서는 Major 오류로 발생하여 해결되어야 하는 오류입니다.

 

 

 

💡 SonarQube에서 발생하는 에러 목록입니다.

 

 

💡 원본 코드
public static Map<String, Object> processApiResponse(ResponseEntity<ApiResponseWrapper> result) {
    Map<String, Object> resultMap = new HashMap<>();
    try {
        if (result != null && result.getStatusCode().isSameCodeAs(HttpStatus.OK)) {
            if (result.getBody() != null && result.getBody().getResult() != null) {
                // ....
            }
        }
    } catch (Exception e) {
        throw new BusinessExceptionHandler(e.getMessage(), ErrorCode.INSERT_ERROR);
    }
}

 

 

 

 

 

2) 해결방법


💡 해결방법

- Objects.requireNonNull() 를 통해서 이를 해결하였습니다.


- Objects.requireNonNull은 Java에서 사용되는 메서드로, 객체 참조가 null인지 확인하는 데 사용됩니다. 이는 주로 입력 매개변수를 유효성 검사하고, 어떤 작업을 수행하기 전에 null이 아닌지 확인하는 데 사용됩니다.
- 만약 전달된 객체 참조가 null이라면, Objects.requireNonNull은 선택적인 오류 메시지와 함께 NullPointerException을 throw합니다. 이 메서드는 null 값을 명시적으로 확인하고 코드에서 적절히 처리하는 편리한 방법을 제공합니다.

 

 

 

 

 

💡 Objects.requireNonNull()

- 객체 참조가 null인지 확인하는 데 사용 되는 메서드입니다.이는 주로 입력 매개변수를 유효성 검사하고, 어떤 작업을 수행하기 전에 null이 아닌지 확인하는 데 사용됩니다.

- 만약 전달된 객체 참조가 null이라면, Objects.requireNonNull은 선택적인 오류 메시지와 함께 NullPointerException을 throw합니다. 이 메서드는 null 값을 명시적으로 확인하고 코드에서 적절히 처리하는 편리한 방법을 제공합니다.
- 해당 메서드는 java.util.Objects의 일부이며Java 7 이상부터 지원이 됩니다.

 

public static Map<String, Object> processApiResponse(ResponseEntity<ApiResponseWrapper> result) {
    Map<String, Object> resultMap = new HashMap<>();
    try {
    	if(Objects.requireNonNull(result.getBody()).getResult()){
    		// ...
    	}
    }
    catch (Exception e) {
        throw new BusinessExceptionHandler(e.getMessage(), ErrorCode.INSERT_ERROR);
    }
}

 

 

💡 [참고] API Document
 

Objects (Java Platform SE 8 )

Generates a hash code for a sequence of input values. The hash code is generated as if all the input values were placed into an array, and that array were hashed by calling Arrays.hashCode(Object[]). This method is useful for implementing Object.hashCode()

docs.oracle.com

 

 

 

 

오늘도 감사합니다. 😀

 

 

그리드형