GithubHelp home page GithubHelp logo

macrozheng / mall-tiny Goto Github PK

View Code? Open in Web Editor NEW
1.8K 47.0 1.2K 508 KB

mall-tiny是一款基于SpringBoot+MyBatis-Plus的快速开发脚手架,拥有完整的权限管理功能,可对接Vue前端,开箱即用。

Home Page: https://www.macrozheng.com

License: Apache License 2.0

Java 99.74% Dockerfile 0.26%
springboot mybatis docker mybatis-plus springsecurity mysql redis

mall-tiny's Introduction

mall-tiny

公众号 交流 后台项目 前端项目

友情提示

  1. 快速体验项目在线访问地址
  2. 全套学习教程《mall学习教程》
  3. 视频教程(2023最新版)《mall视频教程》
  4. 微服务版本:基于Spring Cloud 2021 & Alibaba的项目:mall-swarm
  5. SpringBoot 3.x版本:已支持SpringBoot 3.x + JDK 17,具体参考3.x分支

简介

mall-tiny是一款基于SpringBoot+MyBatis-Plus的快速开发脚手架,拥有完整的权限管理功能,可对接Vue前端,开箱即用。

项目演示

mall-tiny项目可无缝对接mall-admin-web前端项目,秒变权限管理系统。前端项目地址:https://github.com/macrozheng/mall-admin-web

技术选型

技术 版本 说明
SpringBoot 2.7.0 容器+MVC框架
SpringSecurity 5.7.1 认证和授权框架
MyBatis 3.5.9 ORM框架
MyBatis-Plus 3.5.1 MyBatis增强工具
MyBatis-Plus Generator 3.5.1 数据层代码生成器
Swagger-UI 3.0.0 文档生产工具
Redis 5.0 分布式缓存
Docker 18.09.0 应用容器引擎
Druid 1.2.9 数据库连接池
Hutool 5.8.0 Java工具类库
JWT 0.9.1 JWT登录支持
Lombok 1.18.24 简化对象封装工具

数据库表结构

使用流程

环境搭建

简化依赖服务,只需安装最常用的MySql和Redis服务即可,服务安装具体参考mall在Windows环境下的部署 ,数据库中需要导入mall_tiny.sql脚本。

开发规约

项目包结构

src
├── common -- 用于存放通用代码
|   ├── api -- 通用结果集封装类
|   ├── config -- 通用配置类
|   ├── domain -- 通用封装对象
|   ├── exception -- 全局异常处理相关类
|   └── service -- 通用业务类
├── config -- SpringBoot中的Java配置
├── domain -- 共用封装对象
├── generator -- MyBatis-Plus代码生成器
├── modules -- 存放业务代码的基础包
|   └── ums -- 权限管理模块业务代码
|       ├── controller -- 该模块相关接口
|       ├── dto -- 该模块数据传输封装对象
|       ├── mapper -- 该模块相关Mapper接口
|       ├── model -- 该模块相关实体类
|       └── service -- 该模块相关业务处理类
└── security -- SpringSecurity认证授权相关代码
    ├── annotation -- 相关注解
    ├── aspect -- 相关切面
    ├── component -- 认证授权相关组件
    ├── config -- 相关配置
    └── util -- 相关工具类

资源文件说明

resources
├── mapper -- MyBatis中mapper.xml存放位置
├── application.yml -- SpringBoot通用配置文件
├── application-dev.yml -- SpringBoot开发环境配置文件
├── application-prod.yml -- SpringBoot生产环境配置文件
└── generator.properties -- MyBatis-Plus代码生成器配置

接口定义规则

  • 创建表记录:POST /{控制器路由名称}/create

  • 修改表记录:POST /{控制器路由名称}/update/{id}

  • 删除指定表记录:POST /{控制器路由名称}/delete/{id}

  • 分页查询表记录:GET /{控制器路由名称}/list

  • 获取指定记录详情:GET /{控制器路由名称}/{id}

  • 具体参数及返回结果定义可以运行代码查看Swagger-UI的Api文档:http://localhost:8080/swagger-ui/

项目运行

直接运行启动类MallTinyApplicationmain函数即可。

业务代码开发流程

创建业务表

创建好pms模块的所有表,需要注意的是一定要写好表字段的注释,这样实体类和接口文档中就会自动生成字段说明了。

使用代码生成器

运行MyBatisPlusGenerator类的main方法来生成代码,可直接生成controller、service、mapper、model、mapper.xml的代码,无需手动创建。

  • 代码生成器支持两种模式,一种生成单表的代码,比如只生成pms_brand表代码可以先输入pms,后输入pms_brand

  • 生成代码结构一览;

  • 另一种直接生成整个模块的代码,比如生成pms模块代码可以先输入pms,后输入pms_*

编写业务代码

单表查询

由于MyBatis-Plus提供的增强功能相当强大,单表查询几乎不用手写SQL,直接使用ServiceImpl和BaseMapper中提供的方法即可。

比如我们的菜单管理业务实现类UmsMenuServiceImpl中的方法都直接使用了这些方法。

/**
 * 后台菜单管理Service实现类
 * Created by macro on 2020/2/2.
 */
@Service
public class UmsMenuServiceImpl extends ServiceImpl<UmsMenuMapper,UmsMenu>implements UmsMenuService {

    @Override
    public boolean create(UmsMenu umsMenu) {
        umsMenu.setCreateTime(new Date());
        updateLevel(umsMenu);
        return save(umsMenu);
    }

    @Override
    public boolean update(Long id, UmsMenu umsMenu) {
        umsMenu.setId(id);
        updateLevel(umsMenu);
        return updateById(umsMenu);
    }

    @Override
    public Page<UmsMenu> list(Long parentId, Integer pageSize, Integer pageNum) {
        Page<UmsMenu> page = new Page<>(pageNum,pageSize);
        QueryWrapper<UmsMenu> wrapper = new QueryWrapper<>();
        wrapper.lambda().eq(UmsMenu::getParentId,parentId)
                .orderByDesc(UmsMenu::getSort);
        return page(page,wrapper);
    }

    @Override
    public List<UmsMenuNode> treeList() {
        List<UmsMenu> menuList = list();
        List<UmsMenuNode> result = menuList.stream()
                .filter(menu -> menu.getParentId().equals(0L))
                .map(menu -> covertMenuNode(menu, menuList)).collect(Collectors.toList());
        return result;
    }

    @Override
    public boolean updateHidden(Long id, Integer hidden) {
        UmsMenu umsMenu = new UmsMenu();
        umsMenu.setId(id);
        umsMenu.setHidden(hidden);
        return updateById(umsMenu);
    }
}
分页查询

对于分页查询MyBatis-Plus原生支持,不需要再整合其他插件,直接构造Page对象,然后调用ServiceImpl中的page方法即可。

/**
 * 后台菜单管理Service实现类
 * Created by macro on 2020/2/2.
 */
@Service
public class UmsMenuServiceImpl extends ServiceImpl<UmsMenuMapper,UmsMenu>implements UmsMenuService {
    @Override
    public Page<UmsMenu> list(Long parentId, Integer pageSize, Integer pageNum) {
        Page<UmsMenu> page = new Page<>(pageNum,pageSize);
        QueryWrapper<UmsMenu> wrapper = new QueryWrapper<>();
        wrapper.lambda().eq(UmsMenu::getParentId,parentId)
                .orderByDesc(UmsMenu::getSort);
        return page(page,wrapper);
    }
}
多表查询

对于多表查询,我们需要手写mapper.xml中的SQL实现,由于之前我们已经生成了mapper.xml文件,所以我们直接在Mapper接口中定义好方法,然后在mapper.xml写好SQL实现即可。

  • 比如说我们需要写一个根据用户ID获取其分配的菜单的方法,首先我们在UmsMenuMapper接口中添加好getMenuList方法;
/**
 * <p>
 * 后台菜单表 Mapper 接口
 * </p>
 *
 * @author macro
 * @since 2020-08-21
 */
public interface UmsMenuMapper extends BaseMapper<UmsMenu> {

    /**
     * 根据后台用户ID获取菜单
     */
    List<UmsMenu> getMenuList(@Param("adminId") Long adminId);

}
  • 然后在UmsMenuMapper.xml添加该方法的对应SQL实现即可。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.macro.mall.tiny.modules.ums.mapper.UmsMenuMapper">

    <select id="getMenuList" resultType="com.macro.mall.tiny.modules.ums.model.UmsMenu">
        SELECT
            m.id id,
            m.parent_id parentId,
            m.create_time createTime,
            m.title title,
            m.level level,
            m.sort sort,
            m.name name,
            m.icon icon,
            m.hidden hidden
        FROM
            ums_admin_role_relation arr
                LEFT JOIN ums_role r ON arr.role_id = r.id
                LEFT JOIN ums_role_menu_relation rmr ON r.id = rmr.role_id
                LEFT JOIN ums_menu m ON rmr.menu_id = m.id
        WHERE
            arr.admin_id = #{adminId}
          AND m.id IS NOT NULL
        GROUP BY
            m.id
    </select>
    
</mapper>

项目部署

mall-tiny已经集成了Docker插件,可以打包成Docker镜像来部署,具体参考:使用Maven插件为SpringBoot应用构建Docker镜像

安装好MySQL和Redis服务后,直接使用如下命令运行即可。

docker run -p 8080:8080 --name mall-tiny \
--link mysql:db \
--link redis:redis \
-e 'spring.profiles.active'=prod \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny/logs:/var/logs \
-d mall-tiny/mall-tiny:1.0.0-SNAPSHOT

其他说明

SpringSecurity相关

由于使用了SpringSecurity来实现认证和授权,部分接口需要token才可以访问,访问需要认证授权接口流程如下。

  • 点击右上角Authorize按钮输入token,然后访问相关接口即可。

请求参数校验

默认集成了Jakarta Bean Validation参数校验框架,只需在参数对象属性中添加javax.validation.constraints包中的注解注解即可实现校验功能,这里以登录参数校验为例。

  • 首先在登录请求参数中添加@NotEmpty注解;
/**
 * 用户登录参数
 * Created by macro on 2018/4/26.
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class UmsAdminLoginParam {
    @NotEmpty
    @ApiModelProperty(value = "用户名",required = true)
    private String username;
    @NotEmpty
    @ApiModelProperty(value = "密码",required = true)
    private String password;
}
  • 然后在登录接口中添加@Validated注解开启参数校验功能即可。
/**
 * 后台用户管理
 * Created by macro on 2018/4/26.
 */
@Controller
@Api(tags = "UmsAdminController", description = "后台用户管理")
@RequestMapping("/admin")
public class UmsAdminController {

    @ApiOperation(value = "登录以后返回token")
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult login(@Validated @RequestBody UmsAdminLoginParam umsAdminLoginParam) {
        String token = adminService.login(umsAdminLoginParam.getUsername(), umsAdminLoginParam.getPassword());
        if (token == null) {
            return CommonResult.validateFailed("用户名或密码错误");
        }
        Map<String, String> tokenMap = new HashMap<>();
        tokenMap.put("token", token);
        tokenMap.put("tokenHead", tokenHead);
        return CommonResult.success(tokenMap);
    }
}

公众号

加微信群交流,关注公众号「macrozheng」回复「加群」即可。

公众号图片

许可证

Apache License 2.0

Copyright (c) 2018-2022 macrozheng

mall-tiny's People

Contributors

macrozheng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mall-tiny's Issues

/admin/refreshToken

这个接口我看/mall-admin-web前端没有调用呢,怎么刷新token

分页总页数问题

CommonPage的restPage应该为 result.setTotalPage(Convert.toInt((pageResult.getTotal() + pageResult.getSize() - 1) / pageResult.getSize()));

用admin用户登陆,报一个缓存json转化对象的问题。

2022-06-27 23:53:21.072 ERROR 79371 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Could not resolve type id 'com.macro.mall.model.UmsResource' as a subtype of java.lang.Object: no such class found at [Source: (byte[])"["java.util.ArrayList",[["com.macro.mall.model.UmsResource",{"id":1,"createTime":["java.util.Date",1580807095000],"name":"商品品牌管理","url":"/brand/**","description":null,"categoryId":1}],["com.macro.mall.model.UmsResource",{"id":2,"createTime":["java.util.Date",1580807135000],"name":"商品属性分类管理","url":"/productAttribute/**","description":null,"categoryId":1}],["com.macro.mall.model.UmsResource",{"id":3,"createTime":["java.util.Date",1580807173000],"name":"商品属性管?"[truncated 4540 bytes]; line: 1, column: 61] (through reference chain: java.util.ArrayList[0]); nested exception is com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'com.macro.mall.model.UmsResource' as a subtype of java.lang.Object`: no such class found
at [Source: (byte[])"["java.util.ArrayList",[["com.macro.mall.model.UmsResource",{"id":1,"createTime":["java.util.Date",1580807095000],"name":"商品品牌管理","url":"/brand/","description":null,"categoryId":1}],["com.macro.mall.model.UmsResource",{"id":2,"createTime":["java.util.Date",1580807135000],"name":"商品属性分类管理","url":"/productAttribute/","description":null,"categoryId":1}],["com.macro.mall.model.UmsResource",{"id":3,"createTime":["java.util.Date",1580807173000],"name":"商品属性管?"[truncated 4540 bytes]; line: 1, column: 61] (through reference chain: java.util.ArrayList[0])] with root cause

com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'com.macro.mall.model.UmsResource' as a subtype of java.lang.Object: no such class found
at [Source: (byte[])"["java.util.ArrayList",[["com.macro.mall.model.UmsResource",{"id":1,"createTime":["java.util.Date",1580807095000],"name":"商品品牌管理","url":"/brand/","description":null,"categoryId":1}],["com.macro.mall.model.UmsResource",{"id":2,"createTime":["java.util.Date",1580807135000],"name":"商品属性分类管理","url":"/productAttribute/","description":null,"categoryId":1}],["com.macro.mall.model.UmsResource",{"id":3,"createTime":["java.util.Date",1580807173000],"name":"商品属性管?"[truncated 4540 bytes]; line: 1, column: 61] (through reference chain: java.util.ArrayList[0])
at com.fasterxml.jackson.databind.exc.InvalidTypeIdException.from(InvalidTypeIdException.java:43) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.DeserializationContext.invalidTypeIdException(DeserializationContext.java:1780) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownTypeId(DeserializationContext.java:1287) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.jsontype.impl.ClassNameIdResolver._typeFromId(ClassNameIdResolver.java:76) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.jsontype.impl.ClassNameIdResolver.typeFromId(ClassNameIdResolver.java:66) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._findDeserializer(TypeDeserializerBase.java:154) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer._deserialize(AsArrayTypeDeserializer.java:97) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer.deserializeTypedFromAny(AsArrayTypeDeserializer.java:71) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserializeWithType(UntypedObjectDeserializer.java:710) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:287) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:27) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer._deserialize(AsArrayTypeDeserializer.java:120) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer.deserializeTypedFromAny(AsArrayTypeDeserializer.java:71) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserializeWithType(UntypedObjectDeserializer.java:710) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.deser.impl.TypeWrappedDeserializer.deserialize(TypeWrappedDeserializer.java:68) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4482) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3538) ~[jackson-databind-2.11.0.jar:2.11.0]
at org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer.deserialize(Jackson2JsonRedisSerializer.java:73) ~[spring-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
at org.springframework.data.redis.core.AbstractOperations.deserializeValue(AbstractOperations.java:335) ~[spring-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
at org.springframework.data.redis.core.AbstractOperations$ValueDeserializingRedisCallback.doInRedis(AbstractOperations.java:61) ~[spring-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:228) ~[spring-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:188) ~[spring-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96) ~[spring-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
at org.springframework.data.redis.core.DefaultValueOperations.get(DefaultValueOperations.java:53) ~[spring-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
at com.macro.mall.tiny.common.service.impl.RedisServiceImpl.get(RedisServiceImpl.java:32) ~[classes/:na]
at com.macro.mall.tiny.modules.ums.service.impl.UmsAdminCacheServiceImpl.getResourceList(UmsAdminCacheServiceImpl.java:107) ~[classes/:na]
at com.macro.mall.tiny.modules.ums.service.impl.UmsAdminServiceImpl.getResourceList(UmsAdminServiceImpl.java:223) ~[classes/:na]
at com.macro.mall.tiny.modules.ums.service.impl.UmsAdminServiceImpl.loadUserByUsername(UmsAdminServiceImpl.java:262) ~[classes/:na]
at com.macro.mall.tiny.modules.ums.service.impl.UmsAdminServiceImpl.login(UmsAdminServiceImpl.java:104) ~[classes/:na]
at com.macro.mall.tiny.modules.ums.service.impl.UmsAdminServiceImpl$$FastClassBySpringCGLIB$$1bb1d409.invoke() ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at com.macro.mall.tiny.modules.ums.service.impl.UmsAdminServiceImpl$$EnhancerBySpringCGLIB$$a03dce87.login() ~[classes/:na]`

你们有遇到这个问题吗?mybatis-plus生成的controller、service、mapper代码都只有空类,没有具体的方法,只有model类是有方法的,网上也搜不到相关信息,难道就我一个人遇到吗

我直接git clone mall-tiny项目,配置好数据库,没有报错,能正常运行,然后mybatis-plus生成的controller、service、mapper代码里面只有一个空类,没有具体的方法,只有model类是有方法的,这太奇怪了,另个在mall-tiny-plus学习项目中也是这样,没有任何报错,文件也正常生成了,只是代码文件里全是一个空的类名,里面没有方法,比如下面的member控制器和服务实现类
package com.macro.mall.tiny.modules.ums.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**

}

package com.macro.mall.tiny.modules.ums.service.impl;
import com.macro.mall.tiny.modules.ums.model.UmsMember;
import com.macro.mall.tiny.modules.ums.mapper.UmsMemberMapper;
import com.macro.mall.tiny.modules.ums.service.UmsMemberService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**

  • 会员表 服务实现类
  • @author Alex
  • @SInCE 2021-04-26
    */
    @service
    public class UmsMemberServiceImpl extends ServiceImpl<UmsMemberMapper, UmsMember> implements UmsMemberService {

}

下面是控制器信息
"C:\Program Files\Java\jdk1.8.0_77\bin\java.exe" "-javaagent:D:\Program Files\IntelliJ IDEA 2018.3.3\lib\idea_rt.jar=50408:D:\Program Files\IntelliJ IDEA 2018.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_77\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\rt.jar;D:\java\workspace\mall-tiny\target\classes;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-starter-web\2.3.0.RELEASE\spring-boot-starter-web-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-starter\2.3.0.RELEASE\spring-boot-starter-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot\2.3.0.RELEASE\spring-boot-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.3.0.RELEASE\spring-boot-starter-logging-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Alex.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Alex.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.2\log4j-to-slf4j-2.13.2.jar;C:\Users\Alex.m2\repository\org\apache\logging\log4j\log4j-api\2.13.2\log4j-api-2.13.2.jar;C:\Users\Alex.m2\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;C:\Users\Alex.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\Alex.m2\repository\org\yaml\snakeyaml\1.26\snakeyaml-1.26.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-starter-json\2.3.0.RELEASE\spring-boot-starter-json-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.0\jackson-datatype-jdk8-2.11.0.jar;C:\Users\Alex.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.0\jackson-datatype-jsr310-2.11.0.jar;C:\Users\Alex.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.11.0\jackson-module-parameter-names-2.11.0.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.3.0.RELEASE\spring-boot-starter-tomcat-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.35\tomcat-embed-core-9.0.35.jar;C:\Users\Alex.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.35\tomcat-embed-websocket-9.0.35.jar;C:\Users\Alex.m2\repository\org\springframework\spring-web\5.2.6.RELEASE\spring-web-5.2.6.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\spring-beans\5.2.6.RELEASE\spring-beans-5.2.6.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\spring-webmvc\5.2.6.RELEASE\spring-webmvc-5.2.6.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\spring-context\5.2.6.RELEASE\spring-context-5.2.6.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\spring-expression\5.2.6.RELEASE\spring-expression-5.2.6.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.3.0.RELEASE\spring-boot-starter-actuator-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.3.0.RELEASE\spring-boot-actuator-autoconfigure-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-actuator\2.3.0.RELEASE\spring-boot-actuator-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\io\micrometer\micrometer-core\1.5.1\micrometer-core-1.5.1.jar;C:\Users\Alex.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Alex.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.3.0.RELEASE\spring-boot-starter-aop-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\spring-aop\5.2.6.RELEASE\spring-aop-5.2.6.RELEASE.jar;C:\Users\Alex.m2\repository\org\aspectj\aspectjweaver\1.9.5\aspectjweaver-1.9.5.jar;C:\Users\Alex.m2\repository\net\bytebuddy\byte-buddy\1.10.10\byte-buddy-1.10.10.jar;C:\Users\Alex.m2\repository\org\springframework\spring-core\5.2.6.RELEASE\spring-core-5.2.6.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\spring-jcl\5.2.6.RELEASE\spring-jcl-5.2.6.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-starter-validation\2.3.0.RELEASE\spring-boot-starter-validation-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\glassfish\jakarta.el\3.0.3\jakarta.el-3.0.3.jar;C:\Users\Alex.m2\repository\org\hibernate\validator\hibernate-validator\6.1.5.Final\hibernate-validator-6.1.5.Final.jar;C:\Users\Alex.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\Alex.m2\repository\org\jboss\logging\jboss-logging\3.4.1.Final\jboss-logging-3.4.1.Final.jar;C:\Users\Alex.m2\repository\com\alibaba\druid-spring-boot-starter\1.1.10\druid-spring-boot-starter-1.1.10.jar;C:\Users\Alex.m2\repository\com\alibaba\druid\1.1.10\druid-1.1.10.jar;C:\Users\Alex.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.3.0.RELEASE\spring-boot-autoconfigure-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\mysql\mysql-connector-java\8.0.16\mysql-connector-java-8.0.16.jar;C:\Users\Alex.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\Alex.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\Alex.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\Alex.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\Alex.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\Alex.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\Alex.m2\repository\com\google\guava\guava\20.0\guava-20.0.jar;C:\Users\Alex.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\Alex.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\Alex.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\Alex.m2\repository\io\swagger\swagger-models\1.6.0\swagger-models-1.6.0.jar;C:\Users\Alex.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.11.0\jackson-annotations-2.11.0.jar;C:\Users\Alex.m2\repository\io\swagger\swagger-annotations\1.6.0\swagger-annotations-1.6.0.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-starter-data-redis\2.3.0.RELEASE\spring-boot-starter-data-redis-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\data\spring-data-redis\2.3.0.RELEASE\spring-data-redis-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\data\spring-data-keyvalue\2.3.0.RELEASE\spring-data-keyvalue-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\data\spring-data-commons\2.3.0.RELEASE\spring-data-commons-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\spring-tx\5.2.6.RELEASE\spring-tx-5.2.6.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\spring-oxm\5.2.6.RELEASE\spring-oxm-5.2.6.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\spring-context-support\5.2.6.RELEASE\spring-context-support-5.2.6.RELEASE.jar;C:\Users\Alex.m2\repository\io\lettuce\lettuce-core\5.3.0.RELEASE\lettuce-core-5.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\io\netty\netty-common\4.1.49.Final\netty-common-4.1.49.Final.jar;C:\Users\Alex.m2\repository\io\netty\netty-handler\4.1.49.Final\netty-handler-4.1.49.Final.jar;C:\Users\Alex.m2\repository\io\netty\netty-resolver\4.1.49.Final\netty-resolver-4.1.49.Final.jar;C:\Users\Alex.m2\repository\io\netty\netty-buffer\4.1.49.Final\netty-buffer-4.1.49.Final.jar;C:\Users\Alex.m2\repository\io\netty\netty-codec\4.1.49.Final\netty-codec-4.1.49.Final.jar;C:\Users\Alex.m2\repository\io\netty\netty-transport\4.1.49.Final\netty-transport-4.1.49.Final.jar;C:\Users\Alex.m2\repository\io\projectreactor\reactor-core\3.3.5.RELEASE\reactor-core-3.3.5.RELEASE.jar;C:\Users\Alex.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-starter-security\2.3.0.RELEASE\spring-boot-starter-security-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\security\spring-security-config\5.3.2.RELEASE\spring-security-config-5.3.2.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\security\spring-security-core\5.3.2.RELEASE\spring-security-core-5.3.2.RELEASE.jar;C:\Users\Alex.m2\repository\org\springframework\security\spring-security-web\5.3.2.RELEASE\spring-security-web-5.3.2.RELEASE.jar;C:\Users\Alex.m2\repository\cn\hutool\hutool-all\4.5.7\hutool-all-4.5.7.jar;C:\Users\Alex.m2\repository\io\jsonwebtoken\jjwt\0.9.0\jjwt-0.9.0.jar;C:\Users\Alex.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.11.0\jackson-databind-2.11.0.jar;C:\Users\Alex.m2\repository\com\fasterxml\jackson\core\jackson-core\2.11.0\jackson-core-2.11.0.jar;C:\Users\Alex.m2\repository\org\projectlombok\lombok\1.18.12\lombok-1.18.12.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-configuration-processor\2.3.0.RELEASE\spring-boot-configuration-processor-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\com\baomidou\mybatis-plus-boot-starter\3.3.2\mybatis-plus-boot-starter-3.3.2.jar;C:\Users\Alex.m2\repository\com\baomidou\mybatis-plus\3.3.2\mybatis-plus-3.3.2.jar;C:\Users\Alex.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.3.0.RELEASE\spring-boot-starter-jdbc-2.3.0.RELEASE.jar;C:\Users\Alex.m2\repository\com\zaxxer\HikariCP\3.4.5\HikariCP-3.4.5.jar;C:\Users\Alex.m2\repository\org\springframework\spring-jdbc\5.2.6.RELEASE\spring-jdbc-5.2.6.RELEASE.jar;C:\Users\Alex.m2\repository\com\baomidou\mybatis-plus-generator\3.3.2\mybatis-plus-generator-3.3.2.jar;C:\Users\Alex.m2\repository\com\baomidou\mybatis-plus-extension\3.3.2\mybatis-plus-extension-3.3.2.jar;C:\Users\Alex.m2\repository\com\baomidou\mybatis-plus-core\3.3.2\mybatis-plus-core-3.3.2.jar;C:\Users\Alex.m2\repository\com\baomidou\mybatis-plus-annotation\3.3.2\mybatis-plus-annotation-3.3.2.jar;C:\Users\Alex.m2\repository\com\github\jsqlparser\jsqlparser\3.1\jsqlparser-3.1.jar;C:\Users\Alex.m2\repository\org\mybatis\mybatis\3.5.4\mybatis-3.5.4.jar;C:\Users\Alex.m2\repository\org\mybatis\mybatis-spring\2.0.4\mybatis-spring-2.0.4.jar;C:\Users\Alex.m2\repository\org\apache\velocity\velocity-engine-core\2.2\velocity-engine-core-2.2.jar;C:\Users\Alex.m2\repository\org\apache\commons\commons-lang3\3.10\commons-lang3-3.10.jar" com.macro.mall.tiny.generator.MyBatisPlusGenerator
请输入模块名:
ums
请输入表名,多个英文逗号分割:
ums_member
14:06:44.682 [main] DEBUG cn.hutool.log.LogFactory - Use [Slf4j] Logger As Default.
14:06:44.712 [main] DEBUG cn.hutool.setting.dialect.Props - Load properties [/D:/java/workspace/mall-tiny/target/classes/generator.properties]
14:06:44.717 [main] DEBUG cn.hutool.setting.dialect.Props - Load properties [/D:/java/workspace/mall-tiny/target/classes/generator.properties]
14:06:44.722 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================准备生成文件...==========================
14:06:45.058 [main] WARN org.apache.velocity.deprecation - configuration key 'file.resource.loader.unicode' has been deprecated in favor of 'resource.loader.file.unicode'
14:06:45.060 [main] WARN org.apache.velocity.deprecation - configuration key 'file.resource.loader.class' has been deprecated in favor of 'resource.loader.file.class'
14:06:45.061 [main] DEBUG org.apache.velocity - Initializing Velocity, Calling init()...
14:06:45.061 [main] DEBUG org.apache.velocity - Starting Apache Velocity v2.2
14:06:45.063 [main] DEBUG org.apache.velocity - Default Properties resource: org/apache/velocity/runtime/defaults/velocity.properties
14:06:45.072 [main] DEBUG org.apache.velocity - ResourceLoader instantiated: org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:06:45.073 [main] DEBUG org.apache.velocity - initialized (class org.apache.velocity.runtime.resource.ResourceCacheImpl) with class java.util.Collections$SynchronizedMap cache map.
14:06:45.074 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Stop
14:06:45.075 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Define
14:06:45.076 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Break
14:06:45.076 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Evaluate
14:06:45.076 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Macro
14:06:45.077 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Parse
14:06:45.078 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Include
14:06:45.079 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Foreach
14:06:45.099 [main] DEBUG org.apache.velocity.parser - Created '20' parsers.
14:06:45.116 [main] DEBUG org.apache.velocity.macro - "velocimacro.library.path" is not set. Trying default library: velocimacros.vtl
14:06:45.116 [main] DEBUG org.apache.velocity.loader.file - Could not load resource 'velocimacros.vtl' from ResourceLoader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:06:45.117 [main] DEBUG org.apache.velocity.macro - Default library velocimacros.vtl not found. Trying old default library: VM_global_library.vm
14:06:45.117 [main] DEBUG org.apache.velocity.loader.file - Could not load resource 'VM_global_library.vm' from ResourceLoader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:06:45.117 [main] DEBUG org.apache.velocity.macro - Old default library VM_global_library.vm not found.
14:06:45.117 [main] DEBUG org.apache.velocity.macro - allowInline = true: VMs can be defined inline in templates
14:06:45.117 [main] DEBUG org.apache.velocity.macro - allowInlineToOverride = false: VMs defined inline may NOT replace previous VM definitions
14:06:45.117 [main] DEBUG org.apache.velocity.macro - allowInlineLocal = false: VMs defined inline will be global in scope if allowed.
14:06:45.117 [main] DEBUG org.apache.velocity.macro - autoload off: VM system will not automatically reload global library macros
14:06:45.132 [main] DEBUG org.apache.velocity.loader - ResourceManager: found /templates/mapper.xml.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:06:45.142 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/mapper.xml.vm; 文件:D:\java\workspace\mall-tiny/src/main/resources/mapper/ums/UmsMemberMapper.xml
14:06:45.157 [main] DEBUG org.apache.velocity.loader - ResourceManager: found /templates/entity.java.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:06:45.163 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/entity.java.vm; 文件:D:\java\workspace\mall-tiny/src/main/java\com\macro\mall\tiny\modules\ums\model\UmsMember.java
14:06:45.165 [main] DEBUG org.apache.velocity.loader - ResourceManager: found /templates/mapper.java.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:06:45.165 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/mapper.java.vm; 文件:D:\java\workspace\mall-tiny/src/main/java\com\macro\mall\tiny\modules\ums\mapper\UmsMemberMapper.java
14:06:45.166 [main] DEBUG org.apache.velocity.loader - ResourceManager: found /templates/service.java.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:06:45.167 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/service.java.vm; 文件:D:\java\workspace\mall-tiny/src/main/java\com\macro\mall\tiny\modules\ums\service\UmsMemberService.java
14:06:45.169 [main] DEBUG org.apache.velocity.loader - ResourceManager: found /templates/serviceImpl.java.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:06:45.169 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/serviceImpl.java.vm; 文件:D:\java\workspace\mall-tiny/src/main/java\com\macro\mall\tiny\modules\ums\service\impl\UmsMemberServiceImpl.java
14:06:45.171 [main] DEBUG org.apache.velocity.loader - ResourceManager: found /templates/controller.java.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:06:45.172 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/controller.java.vm; 文件:D:\java\workspace\mall-tiny/src/main/java\com\macro\mall\tiny\modules\ums\controller\UmsMemberController.java
14:06:45.172 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================文件生成完成!!!==========================

Process finished with exit code 0

我多次尝试,检查过所有配置,代码是直接下载的,只改了数据库配置,也重启过电脑,始终没有找到问题原因,mybatis-plus不可能只能生成类名,那没什么意义,麻烦知道的帮我看下,非常感谢!

RedisTemplate

redis问题:项目中用redisTemplate去获取redis中的hash内容,value为string的话比如"1,2,3,4",就会报如下错误

2022-08-19 09:53:25.947 ERROR 42200 --- [nio-8091-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Unexpected character (',' (code 44)): Expected space separating root-level values
at [Source: (byte[])"200,1,3"; line: 1, column: 5]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character (',' (code 44)): Expected space separating root-level values
at [Source: (byte[])"200,1,3"; line: 1, column: 5]] with root cause

com.fasterxml.jackson.core.JsonParseException: Unexpected character (',' (code 44)): Expected space separating root-level values
at [Source: (byte[])"200,1,3"; line: 1, column: 5]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) ~[jackson-core-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) ~[jackson-core-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:659) ~[jackson-core-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportMissingRootWS(ParserMinimalBase.java:707) ~[jackson-core-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._verifyRootSpace(UTF8StreamJsonParser.java:1734) ~[jackson-core-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._parsePosNumber(UTF8StreamJsonParser.java:1473) ~[jackson-core-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:900) ~[jackson-core-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:794) ~[jackson-core-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3731) ~[jackson-databind-2.13.3.jar:2.13.3]
at org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer.deserialize(Jackson2JsonRedisSerializer.java:73) ~[spring-data-redis-2.7.0.jar:2.7.0]
at org.springframework.data.redis.core.AbstractOperations.deserializeHashValue(AbstractOperations.java:380) ~[spring-data-redis-2.7.0.jar:2.7.0]
at org.springframework.data.redis.core.AbstractOperations.deserializeHashMap(AbstractOperations.java:324) ~[spring-data-redis-2.7.0.jar:2.7.0]
at org.springframework.data.redis.core.DefaultHashOperations.entries(DefaultHashOperations.java:309) ~[spring-data-redis-2.7.0.jar:2.7.0]
at com.macro.mall.tiny.common.service.impl.RedisServiceImpl.hGetAll(RedisServiceImpl.java:88) ~[classes/:na]
at com.macro.mall.tiny.modules.cfg.service.impl.CfgCacheServiceImpl.getOddsConfigList(CfgCacheServiceImpl.java:108) ~[classes/:na]
at com.macro.mall.tiny.modules.cfg.service.impl.CfgTabletemplateServiceImpl.getOddsConfigList(CfgTabletemplateServiceImpl.java:440) ~[classes/:na]
at com.macro.mall.tiny.modules.cfg.service.impl.CfgTabletemplateServiceImpl$$FastClassBySpringCGLIB$$12198790.invoke() ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.20.jar:5.3.20]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.20.jar:5.3.20]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.20.jar:5.3.20]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) ~[spring-aop-5.3.20.jar:5.3.20]
at com.macro.mall.tiny.modules.cfg.service.impl.CfgTabletemplateServiceImpl$$EnhancerBySpringCGLIB$$622993ee.getOddsConfigList() ~[classes/:na]
at com.macro.mall.tiny.modules.cfg.controller.CfgTabletemplateController.listOddsAll(CfgTabletemplateController.java:179) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_332]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_332]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_332]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_332]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.20.jar:5.3.20]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.20.jar:5.3.20]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.20.jar:5.3.20]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.20.jar:5.3.20]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.20.jar:5.3.20]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.20.jar:5.3.20]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.20.jar:5.3.20]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.20.jar:5.3.20]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.20.jar:5.3.20]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.20.jar:5.3.20]

clearDataSource 权限还是29个

发了这个:/user/**; Attributes: [32:用户资料管理]

curl -X POST "http://localhost:9999/resource/create" -H "accept: /" -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImNyZWF0ZWQiOjE2MzM5NDQ5NTI5MzgsImV4cCI6MTYzNDU0OTc1Mn0.mfQxrFRgpprl5qs9ZIGutFQymvTBqKOUFgcLKVxGdLFCua_yUUm0PtzkAQ5JU_PxP_rgNE_iZ90tgApsDJ_auQ" -H "Content-Type: application/json" -d "{ "categoryId": 6, "createTime": "2021-10-11T09:36:12.770Z", "description": "用户资料管理", "name": "用户资料管理", "url": "/user/**"}"
Request URL

是不是categoryid?
不懂到底哪里出错。。

`
3.3.2
2021-10-11 17:47:16.339 DEBUG 39004 --- [ main] c.m.m.t.m.u.m.U.selectList : ==> Preparing: SELECT id,create_time,name,url,description,category_id FROM ums_resource
2021-10-11 17:47:16.404 DEBUG 39004 --- [ main] c.m.m.t.m.u.m.U.selectList : ==> Parameters:
2021-10-11 17:47:16.463 DEBUG 39004 --- [ main] c.m.m.t.m.u.m.U.selectList : <== Total: 29
2021-10-11 17:47:16.487 WARN 39004 --- [ main] c.m.m.t.s.c.DynamicSecurityFilter : Could not validate configuration attributes as the SecurityMetadataSource did not return any attributes from getAllConfigAttributes()
2021-10-11 17:47:16.653 DEBUG 39004 --- [ main] c.m.m.t.s.c.JwtAuthenticationTokenFilter : Filter 'jwtAuthenticationTokenFilter' configured for use

`
援用原本mall_tiny.sql 有29个ums_resource
还是一定要加个menu

swagger-ui页面获取不到token

swagger-ui页面获取不到token:
1.使用admin/macro123获取不到token,报500错误
2.新注册用户再登陆也是500的错误

同学,您这个项目引入了96个开源组件,存在25个漏洞,辛苦升级一下

检测到 macrozheng/mall-tiny 一共引入了96个开源组件,存在25个漏洞

漏洞标题:Iteris Apache Velocity 安全漏洞
缺陷组件:org.apache.velocity:[email protected]
漏洞编号:CVE-2020-13936
漏洞描述:Iteris Apache Velocity是美国 (Iteris)公司的一个应用软件。用于创建和维护与Apache Velocity Engine相关的开源软件功能。
Apache Velocity Engine versions up to 2.2 存在安全漏洞,攻击者可利用该漏洞执行任意Java代码或运行任意系统命令。
影响范围:(∞, 2.3)
最小修复版本:2.3
缺陷组件引入路径:com.macro.mall:[email protected]>org.apache.velocity:[email protected]

另外还有25个漏洞,详细报告:https://mofeisec.com/jr?p=a3f928

MyBatisPlusGenerator生成器有问题

如果我的两种表cab_b*,cab_svc*
表名我输入了
cab_b*
他会生成cab_b以及cab_svc的表
因为代码会根据""分割,分割出来的第一个字符串为cab
所以他会生成cab
*的数据

关于 ums_resource_category 以及 ums_resource 的绑定策略

ums_resource_category 的作用仅作为 resource 分门别类的作用不参与业务逻辑吗 ?

ums_resource 是基于什么考虑,和 role 直接绑定了 ?

提供以下思路:
场景:为某用户授权 “商品管理” 权限,对应有 a b c d 四个接口
简要实现思路:

  1. resource 和 menu 关联,即 menu_resource “商品管理” id 会和 a b c d 四个接口绑定
  2. role 和 menu 关联
  3. 登录后,通过获取 role ,直接就可以获取 menu 数据及对应的 resource 数据,存在传递关系
    设计原则:
    resource 是非配置类数据,直接和研发绑定,属于研发阶段录入类数据,并且和菜单密不可分

io.lettuce.core.RedisCommandTimeoutException: Command timed out after 3 second(s)

项目启动一段时间,会出现获取redis数据超时的问题,有人遇到过吗

2023-03-09 07:49:14.478 ERROR --- [nio-8091-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] :175 : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException: Command timed out after 3 second(s)] with root cause
io.lettuce.core.RedisCommandTimeoutException: Command timed out after 3 second(s)
at io.lettuce.core.internal.ExceptionFactory.createTimeoutException(ExceptionFactory.java:59)
at io.lettuce.core.internal.Futures.awaitOrCancel(Futures.java:246)
at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:74)
at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1061)
at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$4(LettuceConnection.java:920)
at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:665)
at org.springframework.data.redis.connection.lettuce.LettuceInvoker.just(LettuceInvoker.java:94)
at org.springframework.data.redis.connection.lettuce.LettuceStringCommands.get(LettuceStringCommands.java:55)
at org.springframework.data.redis.connection.DefaultedRedisConnection.get(DefaultedRedisConnection.java:279)
at org.springframework.data.redis.core.DefaultValueOperations$1.inRedis(DefaultValueOperations.java:58)
at org.springframework.data.redis.core.AbstractOperations$ValueDeserializingRedisCallback.doInRedis(AbstractOperations.java:61)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:224)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:191)
at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97)
at org.springframework.data.redis.core.DefaultValueOperations.get(DefaultValueOperations.java:54)
at com.macro.mall.tiny.common.service.impl.RedisServiceImpl.get(RedisServiceImpl.java:47)
at com.macro.mall.tiny.modules.ums.service.impl.UmsAdminCacheServiceImpl.getAdmin(UmsAdminCacheServiceImpl.java:95)
at com.macro.mall.tiny.modules.ums.service.impl.UmsAdminServiceImpl.getAdminByUsername(UmsAdminServiceImpl.java:66)
at com.macro.mall.tiny.modules.ums.service.impl.UmsAdminServiceImpl.loadUserByUsername(UmsAdminServiceImpl.java:260)
at com.macro.mall.tiny.modules.ums.service.impl.UmsAdminServiceImpl.login(UmsAdminServiceImpl.java:104)
at com.macro.mall.tiny.modules.ums.service.impl.UmsAdminServiceImpl$$FastClassBySpringCGLIB$$1bb1d409.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386)
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704)
at com.macro.mall.tiny.modules.ums.service.impl.UmsAdminServiceImpl$$EnhancerBySpringCGLIB$$451ce5e9.login()
at com.macro.mall.tiny.modules.ums.controller.UmsAdminController.login(UmsAdminController.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at com.macro.mall.tiny.security.component.DynamicSecurityFilter.doFilter(DynamicSecurityFilter.java:86)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at com.macro.mall.tiny.security.component.DynamicSecurityFilter.doFilter(DynamicSecurityFilter.java:86)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at com.macro.mall.tiny.security.component.JwtAuthenticationTokenFilter.doFilterInternal(JwtAuthenticationTokenFilter.java:60)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)

Error: Cannot find module 'webpack/bin/config-yargs'

node -v. v16.14.0

npm -v. 8.3.1

yarn run v1.22.19
$ npm run dev

[email protected] dev
webpack-dev-server --inline --progress --config build/webpack.dev.conf.js

node:internal/modules/cjs/loader:936
throw err;
^

Error: Cannot find module 'webpack/bin/config-yargs'
Require stack:

  • /Users/baoming/Documents/study/opensource/mall-admin-web/node_modules/webpack-dev-server/bin/webpack-dev-server.js
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object. (/Users/baoming/Documents/study/opensource/mall-admin-web/node_modules/webpack-dev-server/bin/webpack-dev-server.js:54:1)
    at Module._compile (node:internal/modules/cjs/loader:1103:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1155:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12) {
    code: 'MODULE_NOT_FOUND',

启动失败,未报错

编程工具 IDEA ,JDK 1.8
仅修改数据库、Redis 信息其他未修改。

启动全部日志如下:

. ____ _ __ _ _
/\ / ' __ _ () __ __ _ \ \ \
( ( )_
_ | '_ | '| | ' / ` | \ \ \
\/ )| |)| | | | | || (| | ) ) ) )
' |
| .__|| ||| |_, | / / / /
=========|
|==============|/=////
:: Spring Boot :: (v2.7.5)

2024-03-01 10:57:10.060 INFO 11723 --- [ main] com.macro.mall.tiny.MallTinyApplication : Starting MallTinyApplication using Java 1.8.0_381 on blackcatdeMac-mini.local with PID 11723 (/Users/XXX/mall-tiny/target/classes started by blackcat in /Users/XXX/mall-tiny)
2024-03-01 10:57:10.061 DEBUG 11723 --- [ main] com.macro.mall.tiny.MallTinyApplication : Running with Spring Boot v2.7.5, Spring v5.3.23
2024-03-01 10:57:10.061 INFO 11723 --- [ main] com.macro.mall.tiny.MallTinyApplication : The following 1 profile is active: "dev"
2024-03-01 10:57:10.648 INFO 11723 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2024-03-01 10:57:10.649 INFO 11723 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2024-03-01 10:57:10.669 INFO 11723 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 11 ms. Found 0 Redis repository interfaces.
2024-03-01 10:57:11.122 INFO 11723 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2024-03-01 10:57:11.126 INFO 11723 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2024-03-01 10:57:11.126 INFO 11723 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.68]

登录时报错

用admin登录时报错:com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'com.macro.mall.model.UmsAdmin' as a subtype of java.lang.Object: no such class found
用ceshi登录时报错:java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
请问是什么原因,谢谢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.