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");
    }

 

posted @ 2021-09-22 14:07  jason47  阅读(1118)  评论(0编辑  收藏  举报