How to use LocalDateTime RequestParam in Spring? I get “Failed to convert String to LocalDateTime”

后端 未结 10 1459
小蘑菇
小蘑菇 2020-11-29 02:35

I use Spring Boot and included jackson-datatype-jsr310 with Maven:


    com.fasterxml.jackson.datatype         


        
10条回答
  •  难免孤独
    2020-11-29 02:48

    I found workaround here.

    Spring/Spring Boot only supports the date/date-time format in BODY parameters.

    The following configuration class adds support for date/date-time in QUERY STRING (request parameters):

    // Since Spring Framwork 5.0 & Java 8+
    @Configuration
    public class DateTimeFormatConfiguration implements WebMvcConfigurer {
    
        @Override
        public void addFormatters(FormatterRegistry registry) {
            DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
            registrar.setUseIsoFormat(true);
            registrar.registerFormatters(registry);
        }
    }
    

    respectively:

    // Until Spring Framwork 4.+
    @Configuration
    public class DateTimeFormatConfiguration extends WebMvcConfigurerAdapter {
    
        @Override
        public void addFormatters(FormatterRegistry registry) {
            DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
            registrar.setUseIsoFormat(true);
            registrar.registerFormatters(registry);
        }
    }
    

    It works even if you bind multiple request parameters to some class (@DateTimeFormat annotation helpless in this case):

    public class ReportRequest {
        private LocalDate from;
        private LocalDate to;
    
        public LocalDate getFrom() {
            return from;
        }
    
        public void setFrom(LocalDate from) {
            this.from = from;
        }
    
        public LocalDate getTo() {
            return to;
        }
    
        public void setTo(LocalDate to) {
            this.to = to;
        }
    }
    
    // ...
    
    @GetMapping("/api/report")
    public void getReport(ReportRequest request) {
    // ...
    

提交回复
热议问题