一文了解Java判空、时间转换、组件常用注解

282 阅读1分钟

一、判空

@NotEmpty用于集合类不能为null,且Size>0
@NotBlank用于String不能为null,且trim()之后size>0
@NotNull用于基本类型不能为null,没有Size的约束

基本类型上面用NotEmpty或者NotBlank,出现如下错误:

javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.Integer

二、时间转换

@DateTimeFormat用于前端传给后端@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat用于后端传给前端,是jackson注解@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JSONField用于后端传给前端,是fastjson注解@JSONField(format=“yyyy/MM/dd HH:mm:ss”)

如果@JsonFormat 不生效,可以用@JSONField 可能是用了ResponseBodyAdvice一个接口,自定义一个类,实现这个接口后,就可以对controller层返回的数据统一处理了,类似拦截器

可能原因:

1、JSONField作用于ResponseBodyAdvice之前,已经把对应的日期属性改成了对应格式的字符串,

2、JsonFormat作用于ResponseBodyAdvice之后,由于属性被ResponseBodyAdvice过滤过一次后,JsonFormat可能就找不到对应的属性了

3、JsonFormat和ResponseBodyAdvice互斥,有了ResponseBodyAdvice,JsonFormat就直接不起作用了。

三、组件

@Service引用了@Component注解,也就是component注解实现的功能@service都能实现,

而@Service是对@Component进一步拓展,被@service注解标注的类会被spring认定是业务逻辑层,里面有spring对业务逻辑层管理的一对逻辑

@Service标注业务层组件
@Controller标注控制层组件
@Repository标注数据访问组件,即DAO组件
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注

参考文档:

@DateTimeFormat与@JsonFormat详解

@JsonFormat失效解决(时间转换与数据库不一致)