Конвертер String ➡️ LocalDateTime в Spring

Нужно создать новый утильный класс в котором имплементировать интерфейс org.springframework.core.convert.converter.Converter и переопределить метод convert():

package org.springframework.core.convert.converter;

public interface Converter<S, T> {
    T convert(S source);
}

В качестве параметра s мы подаем что хотим преобразовать, а T — во что хотим преобразовать.

Для преобразования строки, которая приходит в качестве параметра от клиента в объекты LocalDate или LocalTime этот класс будет выглядеть следующим образом:

import org.springframework.format.Formatter;

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

import static ru.javawebinar.topjava.util.DateTimeUtil.parseLocalDate;
import static ru.javawebinar.topjava.util.DateTimeUtil.parseLocalTime;

public class DateTimeFormatters {
    public static class LocalDateFormatter implements Formatter<LocalDate> {

        @Override
        public LocalDate parse(String text, Locale locale) {
            return StringUtils.hasText(text) ? LocalDate.parse(text) : null;
        }

        @Override
        public String print(LocalDate lt, Locale locale) {
            return lt.format(DateTimeFormatter.ISO_LOCAL_DATE);
        }
    }

    public static class LocalTimeFormatter implements Formatter<LocalTime> {

        @Override
        public LocalTime parse(String text, Locale locale) {
            return StringUtils.hasText(text) ? LocalTime.parse(text) : null;
        }

        @Override
        public String print(LocalTime lt, Locale locale) {
            return lt.format(DateTimeFormatter.ISO_LOCAL_TIME);
        }
    }
}

И нужно добавить новые конвертер в конфигурацию Spring, в случае XML это выглядит так:

    <bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean" id="conversionService">
        <property name="formatters">
            <set>
                <bean class="application.web.converter.DateTimeFormatters.LocalTimeFormatter"/>
                <bean class="application.web.converter.DateTimeFormatters.LocalDateFormatter"/>
            </set>
        </property>
    </bean>

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#core-convert

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#format

Leave A Comment

Please be polite. We appreciate that. Your email address will not be published and required fields are marked