es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuándo Spring convierte una cadena de caracteres a LocalDate?

Tengo una aplicación Spring Boot y tengo un servicio que recibe LocalDate como entrada.

por ejemplo ../resource/list?date=2022-01-01

Esto funciona bien con la anotación DateTimeFormat para usar el estándar ISO. Sin embargo, quiero pasar un valor de cadena como “today”. Por ejemplo, ../resource/list?date=today. Si el valor es today, entonces quiero convertirlo a la fecha de hoy y enviar la solicitud a la base de datos. Como el tipo del parámetro es LocalDate, normalmente obtengo una solicitud HTTP 400 mala.

Mi pregunta es, ¿cuándo Spring convierte de String a LocalDate? Si puedo conocer esa etapa, puedo verificar el valor antes de Spring y aplicar mi lógica de negocio.

Tags:  

Answer

  1. Avatar for davy.ai

    Cuando Spring recibe una solicitud, analiza los parámetros de la solicitud y los asigna a los tipos de parámetros correspondientes del método. En este caso, cuando Spring encuentra el tipo de parámetro LocalDate, intenta analizar el valor de la cadena entrante a un objeto LocalDate.

    Spring analiza la cadena a LocalDate durante el proceso de enlace de datos, que se realiza justo después de recibir la solicitud y antes de que ingrese al método del controlador. Si la cadena entrante no está en el formato de fecha esperado, Spring lanzará un error de solicitud incorrecta HTTP 400.

    Para aplicar su lógica comercial y convertir la cadena “today” a la fecha de hoy, puede utilizar un resolvedor de argumentos personalizado. Con un resolvedor de argumentos personalizado, puede interceptar el parámetro antes de que Spring intente vincularlo al método del controlador y aplicar su lógica comercial para modificar el valor del parámetro.

    Para implementar un resolvedor de argumentos personalizado, puede crear una clase que implemente la interfaz HandlerMethodArgumentResolver y anular los métodos supportsParameter y resolveArgument. En el método supportsParameter, puede verificar si el tipo de parámetro es LocalDate y devolver verdadero si lo es. En el método resolveArgument, puede interceptar el valor del parámetro, verificar si es igual a “today” y, si lo es, convertirlo a la fecha de hoy y devolver el objeto LocalDate.

    Una vez que haya implementado el resolvedor de argumentos personalizado, puede registrarlo en Spring agregándolo al método WebMvcConfigurer.addArgumentResolvers. Con el resolvedor de argumentos personalizado en su lugar, Spring lo usará para analizar el valor del parámetro a LocalDate y aplicar su lógica comercial para modificar el valor del parámetro cuando sea necesario.

Comments are closed.