해당 글에서는 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);
}
}