Saltar al contenido

¿Cómo usar LocalDateTime RequestParam en Spring? Aparece “No se pudo convertir la cadena a LocalDateTime”

Solución:

Hiciste todo correctamente :). A continuación, se muestra un ejemplo que muestra exactamente lo que está haciendo. Solo Anote su RequestParam con @DateTimeFormat. No hay necesidad de especial GenericConversionService o conversión manual en el controlador. Esta publicación de blog escribe sobre ello.

@RestController
@RequestMapping("/api/datetime/")
final class DateTimeController {

    @RequestMapping(value = "datetime", method = RequestMethod.POST)
    public void processDateTime(@RequestParam("datetime") 
                                @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime dateAndTime) {
        //Do stuff
    }
}

Supongo que tuvo un problema con el formato. En mi configuración, todo funciona bien.

TL; DR – puedes capturarlo como una cadena con solo @RequestParam, o puede hacer que Spring también analice la cadena en una clase de fecha / hora de Java a través de @DateTimeFormat en el parámetro también.

los @RequestParam es suficiente para tomar la fecha que proporciona después del signo =, sin embargo, entra en el método como un String. Es por eso que está lanzando la excepción de transmisión.

Hay algunas formas de lograrlo:

  1. analice la fecha usted mismo, tomando el valor como una cadena.
@GetMapping("/test")
public Page<User> get(@RequestParam(value="start", required = false) String start){

    //Create a DateTimeFormatter with your required format:
    DateTimeFormatter dateTimeFormat = 
            new DateTimeFormatter(DateTimeFormatter.BASIC_ISO_DATE);

    //Next parse the date from the @RequestParam, specifying the TO type as 
a TemporalQuery:
   LocalDateTime date = dateTimeFormat.parse(start, LocalDateTime::from);

    //Do the rest of your code...
}
  1. Aproveche la capacidad de Spring para analizar automáticamente y esperar formatos de fecha:
@GetMapping("/test")
public void processDateTime(@RequestParam("start") 
                            @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) 
                            LocalDateTime date) {
        // The rest of your code (Spring already parsed the date).
}

Encontré una solución aquí.

Spring / Spring Boot solo admite el formato de fecha / fecha-hora en los parámetros BODY.

La siguiente clase de configuración agrega soporte para fecha / fecha-hora en QUERY STRING (parámetros de solicitud):

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

respectivamente:

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

Funciona incluso si vincula varios parámetros de solicitud a alguna clase (@DateTimeFormat anotación indefenso en este caso):

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) {
// ...
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *