1.jackson在序列化过程中会将大写开头的字段自动转成小写开头



public class BrandRequest {

@JsonProperty(value="UPDATE_TIME")
private String UPDATE_TIME;
public Date getUPDATE_TIME() {
return UPDATE_TIME;
}
public void setUPDATE_TIME(Date uPDATE_TIME) {
UPDATE_TIME = uPDATE_TIME;
}
}


此时在序列号和过程中首字母(或者首单词)被转成小写。

解决方法



@JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.NONE)
public class BrandRequest {
}


2.在反序列化中,源对象出现了目标对象没有的字段,造成JsonMappingException

解决方法,设置DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES



ObjectMapper mapper = new ObjectMapper();

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
try {
return mapper.readValue(json, clazz);
} catch (JsonParseException e) {
logger.info("---jsonToObject2---JsonParseException异常", e);
} catch (JsonMappingException e) {
logger.info("---jsonToObject2---JsonMappingException异常", e);
} catch (IOException e) {
logger.info("---jsonToObject2---IOException异常", e);
}


3.反序列化时间,需要与默认的格式匹配,否则JsonMappingException(如“2020-09-09 12:00:00”则会异常)

解决方法一:



ObjectMapper mapper=new ObjectMapper();
DeserializationConfig cfg= mapper.getDeserializationConfig();
cfg.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
mapper.setDeserializationConfig(cfg);
cfg.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
mapper.setDeserializationConfig(cfg);


解决方法二:先以String接收,再转



SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
  return s.parse(date);
} catch (ParseException e) {
log.info("---getDateFromStr---ParseException");
}