一些容易混淆的实战点
@Value,空值,空字符串,"null"问题
@Value("${aaa}") ,即没给默认值,配置文件必须有aaa这个key的配置;
@Value("${aaa:null}") 即给了默认值null,则
配置文件写"aaa=",则使用配置文件的值(空字符串),这种情况最终取到的值是空字符串;
没有aaa= 这个配置,会使用默认值,且默认值会是"null",而不是null值
@Value("${aaa:}")
private List<String> aaa;------这个最终得到的值是空数组,而不是null
mybatis查list的结果
如果未查到结果,结果集是new ArrayList(),不是null
Json反序列化时的fail-on-ignored-properties属性
spring中默认是false,就是忽略掉;但是如果是自定义的ObjectMapper是true...看源码
public enum DeserializationFeature implements ConfigFeature { USE_BIG_DECIMAL_FOR_FLOATS(false), USE_BIG_INTEGER_FOR_INTS(false), USE_LONG_FOR_INTS(false), USE_JAVA_ARRAY_FOR_JSON_ARRAY(false), FAIL_ON_UNKNOWN_PROPERTIES(true), FAIL_ON_NULL_FOR_PRIMITIVES(false), FAIL_ON_NUMBERS_FOR_ENUMS(false), FAIL_ON_INVALID_SUBTYPE(true), FAIL_ON_READING_DUP_TREE_KEY(false), FAIL_ON_IGNORED_PROPERTIES(false), FAIL_ON_UNRESOLVED_OBJECT_IDS(true), FAIL_ON_MISSING_CREATOR_PROPERTIES(false), FAIL_ON_NULL_CREATOR_PROPERTIES(false), FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY(true), FAIL_ON_TRAILING_TOKENS(false), .... }
自定义的在这里
@Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); objectMapper.registerModule(javaTimeModule); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); return objectMapper; }