Обработчик исключений не работает в WebfluxJAVA

Программисты JAVA общаются здесь
Ответить
Гость
 Обработчик исключений не работает в Webflux

Сообщение Гость »


Привет, я новичок в использовании веб-флюса (Mono и Flux), и я пытаюсь создать контроллер, который будет использовать службу с помощью веб-флюкса для создания списка в Cassandra, но я хотел бы создать персонализированное исключение, когда список равен нулю. или пусто, я пытался создать GlobalExceptionHandler и мое персонализированное исключение, и когда список не равен нулю, ответ в порядке, но когда список имеет значение NULL и когда я использую почтальона, он показывает мне статус «ОК», но тело — нет, не могли бы вы помочь мне решить эту проблему, пожалуйста. это мой код.
это GlobalExceptionHandler

Код: Выделить всё

@RestControllerAdvice
public class GlobalExceptionHandler {

@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity handleResourceNotFoundException(ResourceNotFoundException exception, WebRequest request){
UseCaseListResponse useCaseListResponse = new UseCaseListResponse(MessageInformation.ERROR.getMessage(),
HttpStatus.NOT_FOUND.value(),
exception.getMessage(), null);

return ResponseEntity.status(HttpStatus.NOT_FOUND).body(useCaseListResponse);
}
}
This is my personalized exception

Код: Выделить всё

@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
private String resourceName;
private String fieldName;
private String fieldValue;

public ResourceNotFoundException(String resourceName, String fieldName, String fieldValue) {
super(String.format("%s not was found with: %s = %s ", resourceName, fieldName, fieldValue));
this.resourceName = resourceName;
this.fieldName = fieldName;
this.fieldValue = fieldValue;
}

public ResourceNotFoundException(String resourceName) {
super(String.format("%s not was found", resourceName));
this.resourceName = resourceName;

}}
Service Method

Код: Выделить всё

@Override
public Mono listAllQuotes() {
return quoteRepository
.findAll()
.collectList()
.flatMap(entities -> {
if(entities == null || entities.isEmpty()){
return Mono.error(new ResourceNotFoundException("Quotes"));

}else{
return Mono.just(entities);
}
})
.map(entities -> new UseCaseListResponse(
MessageInformation.SUCCESS.getMessage(),
HttpStatus.OK.value(),
HttpStatus.OK.getReasonPhrase(),
QuoteOutMapper.entityListToDtoList(entities)))
.doOnError(error -> log.error("Error listing entities: " + error.getMessage()));

}
This is the controller

Код: Выделить всё

@GetMapping("/test")
public ResponseEntity example(){
return quoteAdapter.listAllQuotes()
.map(ResponseEntity::ok)
.onErrorResume(ResourceNotFoundException.class,
ex -> Mono.just(ResponseEntity.notFound().build()))
.onErrorResume(Throwable.class,
ex -> Mono.just(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build()))
.doOnError(error -> log.error("Error listing entities: " + error.getMessage())).block();
}


Источник: https://stackoverflow.com/questions/781 ... in-webflux
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»