Привет, я новичок в использовании веб-флюса (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);
}
}
Код: Выделить всё
@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;
}}
Код: Выделить всё
@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()));
}
Код: Выделить всё
@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
Мобильная версия