前言
在用Springboot和bootstrap做项目时,添加数据的时候,增加完毕后跳转失败,并报空指针异常。在添加时间数据时,又报400错误,下面是出现的问题及阶级措施。
1、空指针异常
问题描述:跳转页面出现500错误,说明逻辑代码出现问题,加之又报空指针异常:java.lang.NullPointerException: null
原因: 静态变量或者类变量不是对象的属性,而是属于一个类的属性,Spring的属性注入是基于对象层面上的(一般Spring通过容器去创建对象,创建完成再进行对象的属性注入),在利用@Autowired进行属性注入时,自然不能用关键字static修饰变量了。
解决方案: 去掉static即可,避免注入静态配置
2、时间格式问题
在用"2021-12-13"格式添加日期时,出现400错误,400错误常见的原因有以下两点:
1)前端提交数据的字段名称或者是字段类型和后台的实体类不一致,导致无法封装;
2)前端提交到后台的数据应该是 json 字符串类型,而前端没有将对象转化为字符串类型;
很明显是原因1,前端向后端传递的日期参数类型是字符串类型,而后端声明的是日期类型的,所以自然会出现问题。但是为什么传递"2021/12/13"就不会出现这个问题呢?难道"2021/12/13"就不是字符串形式吗?
阅读Springboot关于属性配置的源码--WebMvcProperties.class会发现 ,其默认的日期格式正好是"2021/12/13"这种类型的
解决方案:
1)在变量上面加注解,有两种方式,用pattern指定某种特定的格式,这时默认的格式就失效了或者用fallbackPatterns指定多种格式。当然这种添加注解的方式看上去方便,但是只对某个类里的属性生效。当然还可以通过HH:mm:ss添加具体的时间,文章结果增加了具体的时间。
//@DateTimeFormat(fallbackPatterns = {"yyyy-MM-dd","yyyy/MM/dd"}),可以写多种日期格式 //@DateTimeFormat(pattern = "yyyy-MM-dd"),这种方式只适合1999-12-05日期格式 private Date birth;
2)利用yaml/yml/properties属性文件进行配置,指定日期格式为yyyy-MM-dd,默认格式:yyyy/MM/dd会失效
#日期格式化 mvc: format: date: yyyy-MM-dd
3、结果