前端后端常见异常汇总

baomidou Mabatis plus引入异常

主要异常信息 Error creating bean with name 'dataSource'

但是有个重要提示

      dynamic-datasource Please check the setting of primary

解决方法:增加

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>4.3.1</version>
</dependency>

2

java.lang.NullPointerException: Cannot invoke "com.tencent.wxcloudrun.dao.UserMapper.selectList(com.baomidou.mybatisplus.core.conditions.Wrapper)" because "this.userMapper" is null

如果你在单元测试中遇到这个错误,确保在测试类上使用了正确的注解来模拟Spring容器,如@RunWith(SpringRunner.class)@SpringBootTest

3

Correct the classpath of your application so that it contains a single, compatible version of org.ap

含有batis名字的类冲突,在pom.xml删除,clean

4.PaginationInnerInterceptor

无法引入PaginationInnerInterceptor

因为 jsqlparser 5.0+ 版本不再支持 jdk8 针对这个问题解耦 jsqlparser 依赖。 正确打开姿势,引入 mybatis-plus-bom 模块,然后引入 ..starter 和 ..jsqlparser.. 依赖

pom.xml中增加

   <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-bom</artifactId>
                <version>3.5.9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-jsqlparser-4.9</artifactId>
        </dependency>

前端axios

spring boot crossorigin 不起作用

 Uncaught (in promise) AxiosError {message: 'Network Error', name: 'AxiosError', code: 'ERR_NETWORK', config: {…}, request: XMLHttpRequest, …}

原因:

    解决springboot添加@CrossOrigin支持跨域不起作用_crossorigin注解不起作用-CSDN博客

springboot2.x版本以后,要用

@CrossOrigin(originPatterns = "*",allowCredentials = "true")

前端+ts+vue3+axios+antdv list

antdv list主要要求有data ,data中要有title

     使用antdv的列表  <a-list item-layout="horizontal" :data-source="data">

   data一直报错,提示不能为null   ,data因为列表要求不能更换,否则列表无法识别

<template>
  <a-list item-layout="horizontal" :data-source="data">
    <template #renderItem="{ item }">
      <a-list-item>
        <a-list-item-meta
          description="Ant Design, a design language for background applications, is refined by Ant UED Team"
        >
          <template #title>
            <a href="https://www.antdv.com/">{{ item.title }}</a>
          </template>
          <!-- <template #typename>
            <a href="https://www.antdv.com/">{{ item.typename }}</a>
          </template> -->
          <template #avatar>
            <a-avatar src="https://joeschmoe.io/api/v1/random" />
          </template>
        </a-list-item-meta>
      </a-list-item>
    </template>
  </a-list>
</template>
<script lang="ts" setup>

import { onMounted, reactive, ref } from "vue";
import { CategoryListApi} from "../../request/api";
 
  
interface DataItem {
  deep:string;
  id:string;
isLeaf:string,
parentid:0,
title: string

}
// let data=reactive([{
//   deep:0,
//   id:1,
//   isLeaf:0,
//   parentid:0,
//   title:"hello"

// }]
// );
let data=ref<[DataItem]|null>(
//   [
//   {

//   deep:0,
//   id:1,
//   isLeaf:0,
//   parentid:0,
//   title:"hello1"



// }]

);
let defaultValue=ref([{
  deep:0,
  id:1,
  isLeaf:0,
  parentid:0,
  title:"hello2"

}]
);
// let data: DataItem[] = [
//   {
//     title: 'Ant Design Title 1',
//   },
//   {
//     title: 'Ant Design Title 2',
//   },
//   {
//     title: 'Ant Design Title 3',
//   },
//   {
//     title: 'Ant Design Title 4',
//   },
// ];
console.log("diyibu",data)
// let x=ref<number| null>(0);
onMounted(
  ()=>getData()
)




    const getData=async () => {
      await CategoryListApi().then(
        response=>{
          console.log("res",response.data)
          // x.value=response.data;
          data.value=response.data;
        } 
      );
    
      // data=response.data;
     
    
    }

  



   //直接使用,一般用在进入页面入请求数据的接口
  //  onMounted(()=>{
  //   CategoryListApi().then(
  //   response=>{
  //     data=response.data??defaultValue;
  //     console.log("hello",data)
  //   }
  //   )





  //  })
   
  // const data = (params: DataItem[]) => {
  // return CategoryListApi().then(response=>{
  //   data= response.data;
  // });
// };
console.log("sss",data);
</script>

后端返回格式:是一个对象数组

注意其中一定要有title字段

      

第一步:定义了interfaceDataItem

   

第二步:定义     let data=ref<[DataItem]|null> 

     <>中间的意思是使用DataItem类型数组,|null表示可以为空

    此处用reactive会报错

let data=ref<[DataItem]|null>(
//   [
//   {

//   deep:0,
//   id:1,
//   isLeaf:0,
//   parentid:0,
//   title:"hello1"



// }]

);

第三步

   data.value=response.data;

 data.value获得一个对象数组,antdv列表item即对应其中每一行

Unable to resolve table

Unable to resolve table 'sh_goods_category' 

原因,刚加的表idea需要在FROM 后面表名处右键  refresh schema

树形控件

  使用后端返回的名字

   1) :field-names="fieldNames"

  2) 定义

         原本以为是拦截接口返回数据进行更名,实际是更换tree组件中识别名字

//给从后端返回的数据重命名
  const fieldNames: TreeProps['fieldNames'] = {
  // children: 'child',
  key:'id',
  title: 'name',   //name就是后端返回的名字
};

 3)更换template中名字为后端返回名字

    

<template #title="{ name, key }">
      <span v-if="key === '1'" style="color: #1890ff">{{ name }}</span>
      <template v-else>{{ name }}</template>
    </template>
<template>
  <a-tree

    v-model:expandedKeys="expandedKeys"
    v-model:selectedKeys="selectedKeys"
    v-model:checkedKeys="checkedKeys"
    checkable
    :tree-data="treeData"
    :field-names="fieldNames"
  >
    <template #title="{ name, key }">
      <span v-if="key === '1'" style="color: #1890ff">{{ name }}</span>
      <template v-else>{{ name }}</template>
    </template>
  </a-tree>
</template>
<script lang="ts" setup>
import { onMounted, ref, watch } from 'vue';
import type { TreeProps } from 'ant-design-vue';
import { CategoryListApi } from '../../request/api';
// let treeData=ref<TreeProps['treeData']|null|undefined>();
  // let treeData: TreeProps['treeData'];
  let treeData=ref<TreeProps['treeData']>();

  //给从后端返回的数据重命名
  const fieldNames: TreeProps['fieldNames'] = {
  // children: 'child',
  key:'id',
  title: 'name',
};
  // let treeData=ref<TreeProps|null>();
//这个代码片段是TypeScript的类型注解,用于声明一个名为treeData的常量,其类型是TreeProps接口中的treeData属性类型。这种写法通常用于定义React组件的属性类型,尤其是树形组件。
// const treeData: TreeProps['treeData'] = [
//   {
//     title: 'parent 1',
//     key: '0-0',
//     children: [
//       {
//         title: 'parent 1-0',
//         key: '0-0-0',
//         disabled: true,
//         children: [
//           { title: 'leaf', key: '0-0-0-0', disableCheckbox: true },
//           { title: 'leaf', key: '0-0-0-1' },
//         ],
//       },
//       {
//         title: 'parent 1-1',
//         key: '0-0-1',
//         children: [{ key: '0-0-1-0', title: 'sss' }],
//       },
//     ],
//   },
// ];


onMounted(
  ()=>getData()
)

const getData=async () => {
      await CategoryListApi().then(
        response=>{
          console.log("res",response.data)
          // x.value=response.data;
          treeData.value=response.data||[];
          // console.log(treeData.value)
     
        } 
      );
      }

// const expandedKeys = ref<string[]>(['1', '2']);
// const selectedKeys = ref<string[]>(['1', '2']);
// const checkedKeys = ref<string[]>(['1', '2']);
  const expandedKeys = ref<string[]>(['1']);
const selectedKeys = ref<string[]>([]);
const checkedKeys = ref<string[]>([]);
watch(expandedKeys, () => {
  console.log('expandedKeys', expandedKeys);
});
watch(selectedKeys, () => {
  console.log('selectedKeys', selectedKeys);
});
watch(checkedKeys, () => {
  console.log('checkedKeys', checkedKeys);
});
</script>

右键菜单不出现

注释位置影响,只是写到 <template #overlay>里面就不行

    <!--{ key: treeKey, name }"原来是 { key: treeKey, title } -->
        <!--treeKey指的是id+1 -->        <!--menuKey指的是下面这个key   注释不能写到 a-menu @click="({ key: menuKey },不然右键不好使-->
    <template #title="{ id: treeKey, name }">
      <a-dropdown :trigger="['contextmenu']">
        <span>{{ name }}</span>
        <template #overlay>
          <a-menu @click="({ key: menuKey }) => onContextMenuClick(treeKey, menuKey)">
            <a-menu-item key="1">添加分类</a-menu-item>
            <a-menu-item key="2">删除分类</a-menu-item>
            <a-menu-item key="3">修改分类</a-menu-item>
          </a-menu>
        </template>
      </a-dropdown>
    </template>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i7i8i9com

创业创新像大树那样给更多人乘凉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值