JSON parse error: Cannot deserialize value of type `java.time.LocalDateTime`
Resolved [ org. springframework. http. converter. HttpMessageNotReadableException:
JSON parse error: Cannot deserialize value of type `java. time. LocalDateTime` from String
"2019-09-11 07:23:59" : Failed to deserialize java. time. LocalDateTime: ( java. time. format. DateTimeParseException) Text '2019-09-11 07:23:59'
could not be parsed at index 10 ; nested exception is com. fasterxml. jackson. databind. exc. InvalidFormatException:
Cannot deserialize value of type `java. time. LocalDateTime` from String "2019-09-11 07:23:59" :
Failed to deserialize java. time. LocalDateTime: ( java. time. format. DateTimeParseException)
Text '2019-09-11 07:23:59' could not be parsed at index 10
解决方案
package cn. tianyustudio. musicpartner_api. config;
import com. fasterxml. jackson. datatype. jsr310. JavaTimeModule;
import com. fasterxml. jackson. datatype. jsr310. deser. LocalDateTimeDeserializer;
import com. fasterxml. jackson. datatype. jsr310. ser. LocalDateSerializer;
import com. fasterxml. jackson. datatype. jsr310. ser. LocalDateTimeSerializer;
import org. springframework. boot. autoconfigure. jackson. Jackson2ObjectMapperBuilderCustomizer;
import org. springframework. context. annotation. Bean;
import org. springframework. context. annotation. Configuration;
import org. springframework. core. convert. converter. Converter;
import java. time. LocalDate;
import java. time. LocalDateTime;
import java. time. format. DateTimeFormatter;
@Configuration
public class LocalDateTimeSerializerConfig {
private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss" ;
private static final String DATE_PATTERN = "yyyy-MM-dd" ;
@Bean
public Converter< String, LocalDate> localDateConverter ( ) {
return new Converter < String, LocalDate> ( ) {
@Override
public LocalDate convert ( String source) {
if ( source. trim ( ) . length ( ) == 0 )
return null;
try {
return LocalDate. parse ( source) ;
} catch ( Exception e) {
return LocalDate. parse ( source, DateTimeFormatter. ofPattern ( DATE_PATTERN) ) ;
}
}
} ;
}
@Bean
public Converter< String, LocalDateTime> localDateTimeConverter ( ) {
return new Converter < String, LocalDateTime> ( ) {
@Override
public LocalDateTime convert ( String source) {
if ( source. trim ( ) . length ( ) == 0 )
return null;
try {
return LocalDateTime. parse ( source) ;
} catch ( Exception e) {
return LocalDateTime. parse ( source, DateTimeFormatter. ofPattern ( DATE_TIME_PATTERN) ) ;
}
}
} ;
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer ( ) {
JavaTimeModule module = new JavaTimeModule ( ) ;
LocalDateTimeDeserializer localDateTimeDeserializer = new LocalDateTimeDeserializer ( DateTimeFormatter. ofPattern ( "yyyy-MM-dd HH:mm:ss" ) ) ;
module. addDeserializer ( LocalDateTime. class , localDateTimeDeserializer) ;
return builder - > {
builder. simpleDateFormat ( DATE_TIME_PATTERN) ;
builder. serializers ( new LocalDateSerializer ( DateTimeFormatter. ofPattern ( DATE_PATTERN) ) ) ;
builder. serializers ( new LocalDateTimeSerializer ( DateTimeFormatter. ofPattern ( DATE_TIME_PATTERN) ) ) ;
builder. modules ( module) ;
} ;
}
}