使用QuerydslPredicateExecutor使用Spring数据时,更改请求URL中的日期时间字符串格式

时间:2018-03-29 08:56:46

标签: spring spring-boot spring-data-rest querydsl

在我的域类中,我有一个字段:

public class Reservation {
    private LocalDateTime created = LocalDateTime.now();

在我的存储库中,我想只找到具有特定日期的保留(时间无关紧要):

public interface ReservationRepository extends Repository<Reservation, Long>, QuerydslPredicateExecutor<Reservation>, QuerydslBinderCustomizer<QReservation> {

        bindings.bind(root.created).first((path, value) -> path.between(value.withMinute(0).withHour(0), value.withMinute(0).withHour(0).plusDays(1).minusSeconds(1)));
    }
}

现在可以使用此网址:

/reservations?created=01/20/16 00:00 AM"

但我想使用这种数据时格式:

2016-01-20T00:00

我理解Spring引导使用RepositoryRestMvcConfiguration.class进行自动配置的问题。默认情况下,TemporalAccessorParser.class使用一些默认的DateTimeFormatter。我想把它改成

DateTimeFormatter ISO_LOCAL_DATE_TIME

1 个答案:

答案 0 :(得分:1)

如果只有@DateTimeFormat注释无效,请尝试向项目添加自定义Converter

public class CustomStringToLocalDateTime implements Converter<String, LocalDateTime> {

    @Override
    public LocalDateTime convert(String source) {
        return LocalDateTime.parse(source);
    }
}

@Configuration
public class RepoRestConfig extends RepositoryRestConfigurerAdapter {
    @Override
    public void configureConversionService(ConfigurableConversionService conversionService) {
        conversionService.addConverter(String.class, LocalDateTime.class, new CustomStringToLocalDateTime());
        super.configureConversionService(conversionService);
    }
}

这种方法适用于我的项目(除了我必须将日期('yyyy-MM-dd')的字符串表示转换为Instantyyyy-MM-ddThh:mm:ssZ))。