Spring AOP的实现
当使用Jackson进行json数据转换时,如果目标字段类型为TimeStamp并且要转换的值为空字串时会报空指针错误。
下面是Timestamp反序列化器的代码
|
|
通过_parseDate
方法转换为Date后,并没有判断是否转换成功而直接调用了getTime方法。
添加一个自定义的TimeStamp的Deserializer,然后通过SimpleModule来注册到ObjectMapper中。
下面的内容基于JPA的Hibernate实现进行讨论。
JPA的关联关系中的single-ended的关联(也就是ToOne)的模式fetch类型是的eager的。 在使用EntityMangerd#find
方法进行查找时,这些关联会通过JOIN的方式被查询出来。但是如果使用Criteria API或者JPQL进行查询时,会发现针对这些关联产生了额外的SELECT查询,也就是通常我们所说的N+1的问题。
POSTMAN目前在我们团队中一直作为一个调用API的测试工具,但是由于我们的一直深入的使用它,导致使用的过程中存在不少很低效的问题。POSTMAN本身提供很多强大的功能,用好了它完全可以成为开发过程中比不可少的开发工具。
如果使用自定义Constraints,ErrorCode的是根据Constraints的名称按照优先度生成的{Constraints名}.{类名}.{字段名}
、{Constraints名}.{字段名}
、{Constraints名}.{字段类型}
、{Constraints名}
。 在注解中定义的message会优先给Bean Validation解析,然后使用解析的结果作为Default Message,ErrorCode作为key,到Spring的MessageSource中再进行一次解析,获得最终的message template。
另外被验证字段本身的名称,再加上注解中除了message
,groups
,payload
属性定义的其他属性的值,会作为key再次到MessageSource进行解析,结果的结果作为变量传入到上面的message template中。
JPA对于关联属性的加载时机,可以通过FetchType
来定义EAGER
或者LAZY
,但是对于加载的方式,是使用SELECT、SUBSELEC、JOIN则是由provider来决定的。JPA并没有提供相关的定义。例如,在使用Hibernate作为proider时,即便定义OneToMany的FetchType
为EAGER
, Hibernate确实会在加载对象的时候同时加载关联对象,但是却是通过SELECT方式来实现的,也就是我们常说的N+1问题,对性能有较大的影响。