Мой код вызывает элемент Mono из базы элементов Flux (уже создан). Включает класс @Repository с "getJobById" и класс @Component "Обработчик" для обработки запроса, такого как getAll, getJobById, post, put, delete. Если я введу неправильный идентификатор - не могу обработать исключение и получаю ошибку NullPointerException. Я хочу поймать исключение вместо этого.
Ошибка:
java.lang.NullPointerException: null at com.javasampleapproach.webflux.repo.impl.JobClientRepositoryImpl.getJobById(JobClientRepositoryImpl.java:32) ~[classes/:na]
at com.javasampleapproach.webflux.functional.handler.JobClientHandler.getJobById(JobClientHandler.java:52) ~[classes/:na]
Уже пробовал это:
@ControllerAdvice
public class ClientExceptionController {
@ExceptionHandler(value = ClientNotfoundException.class)
public ResponseEntity<Object> exception(ClientNotfoundException exception) {return new ResponseEntity<>("Id not found", HttpStatus.NOT_FOUND);}
+
public class ClientNotfoundException extends NullPointerException{
public ClientNotfoundException() {}
public ClientNotfoundException(String s) {
super(s);
}
and in Handler and Repository classes:
if(jobClientRepository.getJobById(jobId).equals(null)) throw new ClientNotfoundException();
Также я пробовал как:
Mono<JobClient> jobMono = jobClientRepository.getJobById(jobId)
.onErrorResume(e->Mono.empty());
@Component
public Mono<ServerResponse> getJobById(ServerRequest request) {
long jobId = Long.valueOf(request.pathVariable("id"));
Mono<ServerResponse> notFound = ServerResponse.notFound().build();
И я пробовал это:
if(jobClientRepository.getJobById(jobId).equals(null)) throw new ClientNotfoundException();
Здесь появляется ошибка:
Mono<JobClient> jobMono = jobClientRepository.getJobById(jobId).onErrorResume(e->Mono.empty());
return jobMono.flatMap(job -> ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(fromObject(job))).switchIfEmpty(notFound).onErrorResume(ClientNotfoundException.class, e -> notFound);
@Repository
@Override
public Mono<JobClient> getJobById(Long id) {if(jobStores.get(id).equals(null)) throw new ClientNotfoundException();
return Mono.just(jobStores.get(id)).onErrorResume(e -> Mono.error(new ClientNotfoundException("Correct ID is required"+e)));