1. 问题一: id为long,传到后台就变了值
使用注解:
@JsonSerialize(using = ToStringSerializer.class)
说明:这个要是只有几位数的情况下,其实都不需要这个注解,大于某个值,19位数的时候就会出问题;
使用fastjson的ToStringSerializer注解,让系统序列化时,保留相关精度。
后台传到前台使用以下注解
@JsonSerialize(using = LongToStringUtil.class)
和前端交互时,值比number数值更大,会导致精度缺失,使用JsonSerialize注解,可以帮助我们解决该问题。
在using = LongToStringUtil.class,可以使用我们自定义的类,来将我们传入的值转换为String类型,来传入到前端,可以解决精度问题,定义的LongToStringUtil类需要继承自JsonSerializer类。
2. 问题二:解析年月类型的日期格式:2022-03
反序列化JsonDeserialize:
@Slf4j public class DateJsonDeserializer extends JsonDeserializer{ @Override public LocalDate deserialize(JsonParser jsonParser, DeserializationContext ctxt) { try { if (jsonParser != null && StringUtils.isNotEmpty(jsonParser.getText())) { LocalDate date = LocalDateTimeUtil.parseDate(jsonParser.getText() + "-01"); return date; } } catch (Exception e) { log.error(e.getMessage()); } return null; } }
在实体类对应属性的set方法上添加注解:
@JsonDeserialize(using = DateJsonDeserializer.class)
public void setCheckDate(LocalDate checkDate) {
this.checkDate = checkDate;
}
序列化:
public class CustomDateSerializer extends JsonSerializer{ @Override public void serialize(LocalDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException { String dateStr = LocalDateTimeUtil.format(value, "yyyy-MM"); gen.writeString(dateStr); } }
在实体类的get方法上添加序列化策略:
@JsonSerialize(using = CustomDateSerializer.class)
public LocalDate getCheckDate() {
return checkDate;
}



