个人博客项目Meblog遇到的坑及解决方案
个人博客项目Meblog遇到的坑及解决方案
问题1:新建spring mvc项目时,添加插件报错"plugin not found".
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
解决方案:
查找资料,发现指正版本号即可解决。
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--指定版本号解决问题--><version>2.2.6.RELEASE</version>
</plugin>
问题2:构造addPost添加博文方法测试出现错误
Controller中的方法如下:
@ApiOperation(value = "增加一篇文章")
@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "文章主键", required = true, dataType = "Integer"),@ApiImplicitParam(name = "title", value = "文章标题", required = true, dataType = "String"),@ApiImplicitParam(name = "summary", value = "文章简介", required = true, dataType = "String"),@ApiImplicitParam(name = "imgUrl", value = "文章题图url", required = true, dataType = "String"),@ApiImplicitParam(name = "gmtCreate", value = "创建时间", required = true, dataType = "LocalDateTime"),@ApiImplicitParam(name = "gmtModified", value = "创建时间", required = true, dataType = "LocalDateTime"),@ApiImplicitParam(name = "categories", value = "文章分类", required = true, dataType = "List<CategoryDto>"),@ApiImplicitParam(name = "tags", value = "文章标签", required = true, dataType = "List<TagDto>"),@ApiImplicitParam(name = "body", value = "文章md源码", required = true, dataType = "BodyDto")})
@PostMapping("/addPost")
//@RequestBody 利用一个对象去获取前端传过来的数据
public String addPost(@RequestBody DetailedPostDto detailedPostDto){postService.addPost(detailedPostDto);return detailedPostDto.toString();
}
错误码如下:
{"timestamp": "2020-12-20T01:48:56.202+00:00","status": 400,"error": "Bad Request",
}
解决:
原因是数据格式出现错误,测试时自动生成的gmtCreate = “2020-12-20T02:13:30.051Z” ,而后端要求的gmtCreate格式为"yyyy-MM-dd HH:mm:ss"
更正格式后,出现新的报错信息
{"timestamp": "2020-12-20T02:31:44.224+00:00","status": 500,"error": "Internal Server Error","message": "\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'gmt_modified' cannot be null\r\n### The error may exist in file"
}
检查message中的信息,发现是gmt_modified数据没有正确插入数据库中,缺失了字段,导致出错,在Service中插入数据是用set方法补充,问题解决。
每次添加博文时,需要将关联的表的信息也插入数据, 然而设计的数据库中detailPostDto的id是在插入后自增生成的,这里涉及一个问题,如何在插入的同时获取这个id呢?(关系表的数据插入需要)
这里我发现MBG工具已经帮助我实现这个功能了
在PostMapper中,使用useGeneratedKeys=“true” keyProperty="id"可以获取插入数据的id,并返回Post对象中
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.lzw.meblog.model.Post" useGeneratedKeys="true">insert into post
</insert>
接着测试add方法,发现还是报错
{"timestamp": "2020-12-20T02:31:44.224+00:00","status": 500,"error": "Internal Server Error","message": "\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException:Cannot add or update a child row: a foreign key constraint fails (`meblog_db`.`post_category`, CONSTRAINT `post_category_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
}
在网上查找相关资料发现是测试数据中的Category信息在数据库中不存在,所以报错,修改测试数据后,成功返回。
问题3:idea所有类的使用全部带红色波浪线
解决:
有可能是没有清除原来的历史缓存,导致一些错误,解决办法是File–>Invalidate Caches,然后重启IDEA。
问题4:写addTag方法时,没有检查tag是否存在而导致重复添加:
代码如下:
public String addTag(TagDto tagDto){Tag tag = new Tag();tag.setName(tagDto.getName());tagMapper.insertSelective(tag);return "该标签成功插入";}
这里没有对tag是否已经存储在数据库中,从而导致对同一个tag重复添加。
解决方案:
这里我的思路是获取这个tag的name,然后从数据库中看有多少个这样name 的tag(虽然应该是1),检查获取的taglist是否为空,如果不为空,那么不对tag做插入,否则进行插入
修改后代码如下:
public String addTag(TagDto tagDto){//首先检查该tag是否已经存在List<Tag> tags;tags = tagMapper.selectIfExist(tagDto.getName());if (!tags.isEmpty()){//该标签已经存在,不做插入处理return "该标签已经存在,不做插入处理";}else{//没有该标签信息,新增Tag tag = new Tag();tag.setName(tagDto.getName());tagMapper.insertSelective(tag);return "该标签成功插入";}}
同时,分类也有类似的问题,对分类进行同样的修改,问题得到解决
问题5:项目启动出错
报错信息:
Could not resolve type alias 'BaseResultMap'
经过查询资料,发现出现这个问题的原因是在写Mapper.xml时,将resultMap写成了resultType导致项目无法启动,修改后项目工程启动。
问题6:addPost方法的一些更正,关于获取的参数
代码如下:
//增加postCategory信息List<CategoryDto> categories = detailedPostDto.getCategories();for (CategoryDto categoryDto:categories) {//获取name,检查是否在数据库中存在Category category = categoryMapper.selectIfExist(categoryDto.getName());if (category==null){//不存在则新增信息category = new Category();category.setName(categoryDto.getName());categoryMapper.insertSelective(category);}categoryDto.setId(category.getId());PostCategory postCategory = new PostCategory();postCategory.setCategoryId(categoryDto.getId());postCategory.setPostId(detailedPostDto.getId());postCategoryMapper.insertSelective(postCategory);}
原本的addPost方法是假设在前端已经获取了Category的信息(id, name),即每次增加都会检查该category是否存在数据库中,但这样的方式可能会降低效率,其次也不太符合业务逻辑,因此将代码的添加category信息修改为如上形式。
这样,每次后端会将前端的分类信息(name)传入即可,对于每一个category进行判断,如果有就使用存在数据库中的数据,如果没有就插入这条数据,然后新增。
问题7:updatePost正文无法修改问题
出问题的代码如下:
//修改body信息BodyDto bodyDto = detailedPostDto.getBody();Body body = new Body();body.setContent(bodyDto.getContent());body.setPostId(post.getId());bodyMapper.updateByPrimaryKeySelective(body);
在测试时,发现MBG生成的方法updateByPrimaryKeySelective无法正常更新,这里在Mapper中将代码做简单的修改,通过post_id进行查找更新
<update id="updateByPostIdSelective" parameterType="com.lzw.meblog.model.Body">update body<set><if test="gmtCreate != null">gmt_create = #{gmtCreate,jdbcType=TIMESTAMP},</if><if test="gmtModified != null">gmt_modified = #{gmtModified,jdbcType=TIMESTAMP},</if><if test="postId != null">post_id = #{postId,jdbcType=INTEGER},</if><if test="content != null">content = #{content,jdbcType=LONGVARCHAR},</if></set>where post_id = #{postId,jdbcType=INTEGER}</update>
测试通过,正文能够成功修改。
个人博客项目Meblog遇到的坑及解决方案相关推荐
- SpringBoot+Vue博客项目中遇到的坑
shiro整合jwt,用于用户登录逻辑流程: 登录流程: 用户登录:输入用户名和密码–>后端校验: –>有异常:处理异常 –>正常,生成jwt 访问接口时,统一被jwtFilter, ...
- springboot+jwt+shiro+vue+elementUI+axios+redis+mysql完成一个前后端分离的博客项目(笔记,帮填坑)
根据B站up主MarkerHub视频制作的一个笔记 我的博客 B站博主链接: https://www.bilibili.com/video/BV1PQ4y1P7hZ?p=1 博主的开发文档: http ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)
基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三) 转载于:https://github.com/Meowv/Blog 上一篇完成了博客的主题切换,菜单和 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五)
基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五) 转载于:https://github.com/Meowv/Blog 上篇文章完成了文章详情页数据查询和清除缓存 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场
基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场 转载于:https://github.com/Meowv/Blog.git 在程序员界,总有一批强迫 ...
- 实战react技术栈+express前后端博客项目(8)-- 前端管理界面标签管理+后端对应接口开发...
项目地址:https://github.com/Nealyang/R... 本想等项目做完再连载一波系列博客,随着开发的进行,也是的确遇到了不少坑,请教了不少人.遂想,何不一边记录踩坑,一边分享收获呢 ...
- 实战react技术栈+express前后端博客项目(3)-- 后端路由、代理以及静态资源托管等配置说明...
项目地址:github.com/Nealyang/Re- 本想等项目做完再连载一波系列博客,随着开发的进行,也是的确遇到了不少坑,请教了不少人.遂想,何不一边记录踩坑,一边分享收获呢.分享当然是好的, ...
- 基于.NetCore开发博客项目 StarBlog - (12) Razor页面动态编译
系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...
- 从0到1编写个人博客项目使用springboot+vue(前后端分离) 到 购买服务器上传项目 到 GitHub开源项目、此过程下所遇问题及解决方法,至少你帮你少走70%弯路
个人博客编写 后记 2022.12.2.4 : 30.此项目告一段落. 编撰此博客本意里除去对找工作的帮助.更多地是想帮助未走过的人去探探路.总结经验.少走弯路.知识的宝贵不在于无价.而是无私.天 ...
最新文章
- 你分库分表的姿势对么?——详谈水平分库分表
- PYTHON黑帽编程 4.1 SNIFFER(嗅探器)之数据捕获(下)
- c语言p1-melepeo,学生选课系统c语言程序代码
- angular2 组件交互
- 【ValueError: Target is multiclass but average=‘binary‘. Please choose another average setting, one 】
- 读jQuery之二十(Deferred对象)
- redis 安装并设置为开机启动服务
- mysql8.0 创建用户并授权
- 关于es6中新增的一些方法----数组篇
- 2021-08-04 WHERE条件查询
- php大马的使用教程,一php大马,值得研究
- windows terminal使用管理员权限打开
- 迅雷链基于智能硬件的DPoA共识机制介绍
- 玩转Luat——导读
- 计算机精准教学,运用“精准教学”进行信息技术教学的过程性评价
- 文字语义纠错技术探索与实践-张健
- 使用python Basemap测站分布图(含站名)
- 如何搭建Jenkins导出Unity安卓环境
- C++编程练习:计算长方体体积、对象数组求学生成绩最高者、销售应用问题、重载复数加法运算
- remote: Support for password authentication was removed on August 13, 2021.