首页 > 解决方案 > 使用 Java 和 React 捕获 SQLExceptions

问题描述

我有一个带有 React 前端、Spring Boot 后端和 Oracle DB 的应用程序。我做了一个触发器,它引发了一个带有自定义编号的自定义异常。出于某种原因,我无法在 React 中显示其消息 - 只有该请求失败,状态码为 500。我该怎么做?出于某种原因,当我尝试将 SQLException 添加到 catch 块时,它说它不能从任何地方抛出。道实现:

@Override
    public void delete(Integer id) {
        SqlParameterSource parameters = new MapSqlParameterSource().addValue("ID_SETTINGS", id);
        try {
            namedParameterJdbcTemplate.update(DELETE_SQL, parameters);
        } catch (DataAccessException e) {
            log.error(e.getMessage());
            throw new RuntimeException("Error during deletion: " + e.getMessage());
        }
    }

控制器:

@DeleteMapping("/{id}")
    public ResponseEntity<?> delete(@PathVariable("id") Integer id) {
        log.info("Request for delete settings {}", id);
        Settings settings = settingsService.findById(id);
        settingsService.delete(settings.getId());
        log.info("SUCCESS: {} deleted.", settings.getId());
        return new ResponseEntity<>(settings.getId() + " deleted successfully.", HttpStatus.NO_CONTENT);
    }

前面的 ApiSetvice:

delete(id) {
        return axios.delete(`${BASE_URL}/${id}`, ApiService.getAuthHeader());
    }

反应中的按钮:

<Button
                            variant='primary'
                            onClick={() => {
                                globalProps
                                    .deleteItem()
                                    .then(() => {
                                        table.draw();
                                    })
                                    .catch((e) => {
                                        console.log(e);
                                        this.setState({ error: e.message });
                                        this.setState({ showModalBatch: true });
                                    });
                                this.props.toggleShowDelete();
                            }}
                        >
                            Удалить
                        </Button>

删除项目:

deleteItem = async () => {
        await SettingsApiService.delete(this.state.selectedId);
    };

我如何正确处理这里的 oracle 异常?

标签: reactjsoraclespring-bootexceptionsqlexception

解决方案


推荐阅读