1、校验类注解
1.1 后端 —> 前端
@JsonIgnore // 返回json数据时(实体序列化,即@ResponseBody), 实体类标注有该注解,将不会返回该属性
1.2 前端 —> 后端
@Valid // 启用过滤
@NotBlank(message = "名称不能为空") //标注这个注解,其属性不能为null,需搭配@Valid
@Pattern(regexp="^[\\u4e00-\\u9fa5a-zA-Z0-9]{1,64}$",message="正则表达式")
2、JSON 序列化、反序列化的注解
2.1 @DateTimeFormat和@JsonFormat的区别
@JsonFormat(pattern = DateUtil.DATE_TIME_PATTERN) // 后 -> 前, Date -> JsonString
private Date startTime;
@DateTimeFormat(pattern = DateUtil.DATE_TIME_PATTERN) // 前 -> 后, JsonString -> Date
private Date startTime;
/**
* 一、功能: @DateTimeFormat和@JsonFormat都是处理时间格式化问题的,把其他类型转换成自己需要的时间类型。
二、导包: @DateTimeFormat和@JsonFormat分别属于spring和jackson,所以我们需要导入相应的包。
三、区别:
来源的包不同,作用也不同:
@DateTimeFormat是spring包里面的注解,作用是接收从页面传到后台的日期值;
@JsonFormat是jackson包里面的注解,作用是从后台向前台传递日期值;
使用@DateTimeFormat时,前台向后台传数据,必须要使用url拼接参数的方式才生效;
四、注意:
4.1 @JsonFormat只是在将实体返回给前端JSON格式数据时才有效的转换为(yyyy-MM-dd HH:mm:ss)格式的时间,
其他时候日期格式不会被转换。 例如使用了控制器使用@ResponseBody序列化 或在JSON序列化时 JSON.toJsonString()
4.2 使用@DateTimeFormat时,前台向后台传数据,必须要使用url拼接参数的方式才生效;
*/
2.2 @JsonDeserialize
// json反序列化处理
@JsonDeserialize(using = Boolean2IntegerDeserializer.class)
private Integer isEnabled;
/**
* 反序列化处理
* <p>
* Integer类型字段转Boolean, (0,1) ==> (false,true))
* </p>
* @date 2023/1/6 9:55
*/
public class Boolean2IntegerDeserializer extends JsonDeserializer<Integer> {
@Override
public Integer deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
// 拿到jsonString该字段的值(字符串)
String stringValue = jp.getText();
if (Objects.nonNull(stringValue)) {
if ("true".equalsIgnoreCase(stringValue) || "false".equalsIgnoreCase(stringValue)){
return "true".equalsIgnoreCase(stringValue) ? 1 : 0;
}else if (NumberUtil.isNumber(stringValue)){
return Integer.parseInt(stringValue);
}else {
throw new JsonParseException(jp, "json 转换异常, 无法解析的字段类型!");
}
}
// 如果为空, 默认返回0
return 0;
}
}
链接: json中的日期格式化@JsonFormat、@DateTimeFormat jackjson,fastjson,gson等