jackson在序列化时将字段开头大写转成小写,反序列化中JsonMappingException异常
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"); }