概述
项目异常问题解决记录
- 请求状态码及异常解决方案
- WEB响应
- 请求失败:一直302重定向
- 找不到资源:一上来就404
- 响应失败:415不支持的类型
- 参数匹配相关异常:400
- 时间相关
- 时间少了8小时
- 时间格式转换报错
- 数据库-时区问题导致页面响应失败
- 静态页面问题
- 丢失部分数据
- 属性注入失败
- 丢失基本类型数据
- 含大写字段丢失数据
- Feign中数据为null或不匹配、报405/500error Creating bean/RequestParam.value() was empty on parameter 0
- Controller返回空数据
- JsonParseException...was expecting ('true', 'false' or 'null')
- Cannot construct instance of com.ali.eurekaprovider.pojo.User
- 项目导入、配置
- IDEA DEBUG失效
- SpringBoot项目启动失败
- cannot access configrable applicationcontext
- SpringBoot构建失败,xmlbeans-2.6.0问题
- SSM项目启动失败
- 严重: Error filterStart
- mybatis逆向工程启动失败
- 报错context 标签blabla
- webapp没有被标记为web根目录
- 数据库连接建立失败
- Springboot项目打包失败
- Log4J 配置失效
- swagger问题
- Swagger-UI页面测试无法传参
- git
- 插件下载失败
- SpringCloudConfig 报NoremoteRepositry 或者 invalid origin错误!
- shiro
- filterFactoryBean.setUnauthorizedUrl不生效
- 多realm配置出问题
- 前后端分离密码匹配不成功
- SpringCloud
- Eureka
- 找不到服务实例
- eureka客户端启动报错serviceURL 8671(从eureka获取注册服务报连接错误)
- Ribbon
- UserFeign 404,找不到FeignClient之类的
- Zuul
- Zuul路由异常,com.netflix.zuul.exception.ZuulException:Forwarding error 且报超时
- 不生效
- 中and导致报语法错误
- SpringCloud Config
- 配置不生效
- Hadoop
- XX.parquet is not sequence file
- return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
- IndexOutOfBoundsException(并没有参数)
- Mybatis
- Invalid bound statement (not found)(Mybatis的Mapper绑定问题)
- DbUnit
- 找不到表/重复表
- Docker
- Systemctl无法使用
请求状态码及异常解决方案
状态码 | 异常名 | 具体发生原因 | 常见场景 | 解决方式 |
---|---|---|---|---|
400 | bad request | 前后端参数名、值不匹配 | 后端@RequestMapping(params={})进行了限定,前端传的参数不符合 | |
401 | 权限问题 | |||
403 | 未授权问题 | |||
404 | 资源未找到 | 1.地址错误 | 地址输入错误 | 检查 |
404 | 资源未找到 | 2.后台未向前端有任何输出 | 后端返回void,或使用了responsebody注解但并未配置Jackson解析的依赖 | 视图解析器使用order属性 |
404 | 资源未找到 | 3. 启动类上手动@ComponentScan导致SpringbootApplication中原定义的扫描范围出问题,或者MapperScan等扫描范围出问题,找不到Controller | 去掉手动加上的@ComponentScan | |
404 | 资源未找到 | 4.当前页面资源类型无法被默认视图解析器解析 | jsp和HTML并存的项目 | 视图解析器使用order属性 |
415 | Unsupported Media Type | 前端传递的信息与后台接收信息类型不一致 | 后台使用了@RequestBody注解(接收Json数据)而前端是以form表单提交 | 中间使用Json接收中转一下 删除后端@RequestBody注解 |
415 | Unsupported Media Type | json依赖包问题导致无法解析 | 依赖包导入有问题,更换版本或依赖包 | |
500 | Ambiguous handler methods mapped for ‘XXX’ | 请求的处理器不明确 | 两个处理器的mapping格式和方法类型一样,服务器无法判断当前请求应当使用哪个处理器 | 保证处理器映射的唯一性(对其中一个的path或method进行更改) @RequestMapping(value = “/{name}”,method = RequestMethod.GET) public …{} @RequestMapping(value = “/”,method = RequestMethod.POST) public…{} |
WEB响应
数字 | 原因 | 解决方案 |
---|---|---|
400 | 传递了参数但是无法解析(传参格式问题) | |
401 403 | 权限问题 | |
404 | 资源无法找到(路径等问题) | |
405 | ||
415 | 参数类型不匹配(Json) | |
500 | 代码有问题 | |
请求失败:一直302重定向
配置shiro权限拦截时接口名称写错,导致应该正常访问的login接口一直被拦截重定向
找不到资源:一上来就404
使用的静态页面,没有配置mvc:default-servlet-handler,导致中央处理器将其按照动态资源处理
响应失败:415不支持的类型
- Jackson包导入异常
- 错误使用/未使用requestBody responseBody注解
参数匹配相关异常:400
-
Required List parameter ‘ids’ is not present
后端web层接收时错误使用了@requestparam 或未使用注解前后端传对象: 前端表单+POST提交——属性和字段名一致,controller方法可以直接以对象接收,无需任何注解 前端Json提交——后端需使用@requestBody解析为对象(记得使用解析包)
时间相关
时间少了8小时
数据库和存储时时间显示都正常,查询后渲染到页面时显示少8个小时
是Json解析并渲染到前端时使用的时区问题,pojo原型的Date类型参数上添加注解:@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone = “GMT+8”),明确时区为GMT+8即可
时间格式转换报错
前端某一属性值为时间字符串,pojo和数据库都是数值类型,故需要在js中进行转换才能成功!否则参数类型错误!
Date.parse(字符串) 转换成日期
日期对象.valueOf() 转换成毫秒值
vm.activity.beginTime = Date.parse(vm.activity.beginTime).valueOf();
vm.activity.endTime = Date.parse(vm.activity.endTime).valueOf();
前端为字符串,实体类和数据库都是用date类型(实体类必须是Util的date不是SQL的date)
方法1,在yml中进行指定格式 spring : mvc : date-format: yyyy-MM-dd
方法2,在实体类添加@DatetimeFormat(pattern=“yyyy-MM-dd”)注解(与方法1效果相同)
以上2个方法,pattern指定严格(年月日时分秒)的话,就只能严格接收这样的类型的字符串;简单指定(年月日)的话,也可以接收带时分秒的,但会损失精度
POJO是date类型,前端需要格式化后展示
在实体类属性上添加@JsonFormat(pattern="yyyy - MM -dd")注解
数据库-时区问题导致页面响应失败
在URL后追加 &serverTimezone=GMT(或在application.yml中配置serverTimezone) 即可
静态页面问题
- Vue vue-router无法渲染
router-link to无法渲染为链接a标签,也无法加载锚点:vue-router.min.js必须紧接着vue.js引用!!
丢失部分数据
属性注入失败
可能存在new的情况,同时使用new和springIOC管理会出错。请保证全程使用IOC
丢失基本类型数据
使用mapper启动器时,实体类属性必须用封装类型存放!基本类型(int,long)会显示为null
含大写字段丢失数据
application.yml中加入mybatis的全局配置(开启驼峰转换):
mybatis:
configuration:
map-underscore-to-camel-case: true
Feign中数据为null或不匹配、报405/500error Creating bean/RequestParam.value() was empty on parameter 0
基本类型,消费端可以取到,服务端取不到:
需在FeignClient 和 所有相关Controller都是用@RequestParam("")注解!必须声明参数名,才能正常传递!!
自定义类型(对象类型),无法从前端获取数据:
必须使用POST传递+@RequestBody注解,前端传输json数据;
Controller返回空数据
Lombok插件失效,某些时候需要打开注解编程并删除target目录后重新编译
JsonParseException…was expecting (‘true’, ‘false’ or ‘null’)
Cannot construct instance of com.ali.eurekaprovider.pojo.User
页面向后端传递对象,使用HTML语言中的Serializable()转Json不好用,需要先把所有属性字段封装成一个对象(手写Json{}),然后使用Json.Stringfy()把对象转换成Json字符串,最后后端直接使用@ResponseBody传对象即可。
function addPro() {
var pname=$("#pname").val();
var pnumber=$("#pnumber").val();
var premark=$("#premark").val();
var tid=$("#select_product_type").val();
var newPro = {
pname:pname,
pnumber:pnumber,
premark:premark,
type:{
tid:tid
}
};
$.ajax({
url:"/pro_a1",
type:"post",
data:JSON.stringify(newPro),
contentType: "application/json; charset=utf-8",
success:function (res) {
alert(res.msg);
if(res.code==200){
location.href="/pro_qa";
}else {
alert("新增失败");
}
}
})
};
项目导入、配置
IDEA DEBUG失效
happened when work for PP(EDM).
background:an raptor project using 3 ports .
i just pressed ctrl+c end last applicationb by command and then start restart this app in the same port.(with in 5 mins)
last app was killed by signal from std(ctrl c) , but socket still waiting and occupied(it cost 2-4mins) , so it’s better to wait for 5 more mins and then start new app.
SpringBoot项目启动失败
cannot access configrable applicationcontext
删除自动生成的main.iml并刷新maven即可
SpringBoot构建失败,xmlbeans-2.6.0问题
在依赖列表中找到xmlbeans依赖,手动替换为本地maven库中的其他版本
SSM项目启动失败
严重: Error filterStart
shiroFilter在web.xml中的注册名与shiro.xml中的名称不一致,导致无法找到这个过滤器
mybatis逆向工程启动失败
报错context 标签blabla
context中的内容按顺序规整排布后正常(原因未知)
webapp没有被标记为web根目录
只需更改打包方式为war后刷新即可
数据库连接建立失败
db.properties中不能写 username(username是保留字,默认是本机17760,配置数据库用户名可以使用user)
Springboot项目打包失败
参考:https://blog.csdn.net/guduyishuai/article/details/60968728
- 所有Spring项目必须有main方法(可以不加@SpringbootApplication)
- 子模块间存在依赖,被依赖者需要指明自己打包的 可执行jar包后缀,否则默认打成不可执行jar包
Log4J 配置失效
问题描述:
- 项目没有配置日志相关参数,但是仍然可以打印某种格式的日志——依赖包中有日志配置文件,你正在按其配置输出
- 配置了Log4j的配置文件,但不起作用——可能是配置文件名/位置错误,或被其他的log4j配置文件覆盖
- Could not initialize Logback logging from …/ No appenders could be found for log—— 可能是配置文件名/位置错误,或被其他的log4j配置文件覆盖
具体解决:
- 配置文件log4j.properties(文件名必须这个,放在resources目录)
log4j.rootLogger = info,stdout,D,E
log4j.appender.stdout.Target = System.out
#log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] (%F:%L) - %m%n
#
log4j.appender.D=org.apache.log4j.RollingFileAppender
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %l %m%n
log4j.appender.D.MaxFileSize=50MB
log4j.appender.D.MaxBackupIndex=2
log4j.appender.D.File=F://XX.log
log4j.appender.D.Append=true
#
#
log4j.appender.E=org.apache.log4j.RollingFileAppender
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.MaxFileSize=30MB
log4j.appender.E.MaxBackupIndex=1
log4j.appender.E.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %l %m%n
log4j.appender.E.File=F://XX_err.log
log4j.appender.E.Append=true
- POM中排除其他的log4j依赖,手动导入log4j依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
swagger问题
Swagger-UI页面测试无法传参
@ApiImplicitParam中,如果参数为Integer,不要使用datatype属性描述,使用了反而报错
git
插件下载失败
-
git版本问题:git和Jenkins版本不匹配的话jenkins无法集成
-
git更新中心问题:使用国内镜像,在advance更改url后提交并checknow即可(最好在更改之前重启tomcat即重启Jenkins)
-
服务器问题:腾讯云服务器与Jenkins更新中心交互的连接更稳定速度更快,原因未知。
SpringCloudConfig 报NoremoteRepositry 或者 invalid origin错误!
配置文件中该配置使用yml且放在最前面,确保格式正确且被读取到。
spring:
cloud:
config:
server:
git:
uri: https://gitee.com/zoyar/SpringCloudConfig.git
username: zoyar
password: 1127cb56
search-paths: repo
shiro
filterFactoryBean.setUnauthorizedUrl不生效
该设置只对代码方式设置的权限过滤器生效,注解方式/页面标签形式的不生效
多realm配置出问题
securityManager的配置中,setAuthenticator一定要在setRealms之前;
前后端分离密码匹配不成功
自定义token如果继承UsernamePasswordToken,其密码默认是char[],需要构造成new String才能比对是否equal
SpringCloud
Eureka
找不到服务实例
查看GetInstance方法的参数–serviceID是否正确。应按application.name查找service集群(application.name不配置则默认为UNKNOW)
eureka客户端启动报错serviceURL 8671(从eureka获取注册服务报连接错误)
甚至客户端整个端口被重置成8080默认端口:
原因:
有其他页面相关的配置文件优先加载了,如bootStrap.properties或者application.properties都优于application.yml;
或者配置静态资源路径,将整个resource目录配进去了,导致application.yml没有生效
Ribbon
UserFeign 404,找不到FeignClient之类的
2个FeignClient不同,但使用过第一个,再使用第二个FeignClient,再次调用第一个FeignClient会错误
根本问题在于Ribbon的策略配置问题,策略配置类配置在了启动类,成为了全局的配置,而不是针对某一个服务的配置。(正常是某一个服务使用某一种轮询策略/随机策略)所以当再调服务1的client时,可能会随机/轮询映射到服务2的服务,当然无法找到。
解决方案:IRule的配置类单独写!!!!不要写在启动类或者写在有@ComponentScan的类上。
Zuul
Zuul路由异常,com.netflix.zuul.exception.ZuulException:Forwarding error 且报超时
如果被路由的服务加了熔断器,需要在被路由的服务中的Hystrix配置超时问题:
hystrix:
command:
default:
execution:
timeout:
enabled: true
isolation:
thread:
timeoutInMilliseconds: 60000
<if test="id!=null && id!=’’ ">不生效
Integer类型的id字段传入0,符合不为空不为“”。但if没有生效:
mybatis默认将Integer类型的0视为“”空字符串。
解决方案:
改为<if test="id!=null>即可
<if>中and导致报语法错误
where要使用<where>标签,可以使mybatis自动解析and的语法;
如果使用直接写where,则如果直接拼接and可能会报错(where and username=‘111’)
SpringCloud Config
配置不生效
注意加载顺序,bootstrap.properties和 application.properties问题
Hadoop
XX.parquet is not sequence file
使用Hive命令运行读取SparkSQL 创建的表。SparkSQL saveAsTable默认使用parquet格式 建表默认生成parquet文件,Hive无法读取。应转为HQL建表
df_new.registerTempTable("gao_temp20151114")
hc.sql("create table gaotest20151114_3 as select * from gao_temp20151114")
return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
关闭map端join:set hive.auto.convert.join=false;
设置reduce个数:set mapred.reduce.tasks=24;
设置set mapred.max.split.size= 300000000; 将分片“缩小”,这样的坏处就是会起更多的map,产生更多的map去执行。
设置集群的heap.size设置的更大些,比如2048(2g).设置方式如下:
<property>
<name >mapred.child.java.opts</name>
<value>-Xmx2048m </value>
</property>
直接修改 任务启动的jvm参数,默认值-Xmx200m,建议值-XX:-UseGCOverheadLimit -Xms512m -Xmx2048m -verbose:gc -Xloggc:/tmp/@taskid@.gc 更有利于灵活利用集群资源
IndexOutOfBoundsException(并没有参数)
https://issues.apache.org/jira/browse/HIVE-4237 网站上的解释
在select中使用count(distinct 字段)对在后面的group by字段中的字段 不能重复
Mybatis
Invalid bound statement (not found)(Mybatis的Mapper绑定问题)
https://www.cnblogs.com/itzyz/p/10954427.html
出现这个错误时,按以下步骤检查一般就会解决问题:
1:检查xml文件所在package名称是否和Mapper interface所在的包名一一对应;
2:检查xml的namespace是否和xml文件的package名称一一对应;
3:检查方法名称是否对应;
4:去除xml文件中的中文注释;
5:随意在xml文件中加一个空格或者空行然后保存。
6:终极方案:mapper.xml如果写在了java类包下,需要把java包也配置成resource路径(否则target下没有xml编译后的文件)
<build>
<sourceDirectory>src/main/java</sourceDirectory >
<testSourceDirectory>src/test/java</testSourceDirectory >
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
</build>
DbUnit
找不到表/重复表
数据库中不可存在任何重名表(不同schema中也不可以重名)
Docker
Systemctl无法使用
原因:报错内容显示 1号进程不是 init (创建容器时指定为/bin/bash 等),导致缺少相关文件无法运行
解决:创建容器时的命令指定为 /sbin/init,并开启privileged=true,后台运行,再次进入容器才指定为你的命令
如:
docker run -tid --name centos_test --privileged=true centos /sbin/init
docker exec -it test /bin/bash
最后
以上就是无语月饼为你收集整理的项目异常问题记录请求状态码及异常解决方案WEB响应时间相关静态页面问题丢失部分数据项目导入、配置swagger问题gitshiroSpringCloudHadoopMybatisDbUnitDocker的全部内容,希望文章能够帮你解决项目异常问题记录请求状态码及异常解决方案WEB响应时间相关静态页面问题丢失部分数据项目导入、配置swagger问题gitshiroSpringCloudHadoopMybatisDbUnitDocker所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复