Spring - не удалось преобразовать значение свойства типа java.lang.String в требуемый тип java.util.Date - PullRequest
0 голосов
/ 09 октября 2018

Я читал некоторые темы по этому поводу, но ни одна из них не помогла мне.

Моя проблема в том, что преобразование работает хорошо, но сегодня я получил жалобу пользователя с использованием ios 12 и Safari.Сразу же я проверил на Iphone с IOS 12, и я не мог воспроизвести ошибку.Это может быть какая-то конкретная конфигурация устройства или региональные настройки?

Пожалуйста, помогите!Спасибо.

Контроллер

@Controller
public class SaleController {

    @InitBinder
    public void setPropertyBinder(WebDataBinder dataBinder) {

        //The date format to parse or output your dates
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);

        //Create a new CustomDateEditor
        CustomDateEditor editor = new CustomDateEditor(dateFormat, true);

        //Register it as custom editor for the Date type
        dataBinder.registerCustomEditor(Date.class, editor);            
    }

    @RequestMapping(value="/venda3", method=RequestMethod.POST)
    public String venda3(@Valid @ModelAttribute("anuncioImovel") AnuncioImovel anuncioImovel, BindingResult resultImovel, Model model, Principal principal, HttpServletRequest request) {

    }    
}

Модель

@Entity
public class AnuncioImovel {

    @Column(nullable=true)
    @Temporal(TemporalType.DATE)
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @Past
    private Date inicioLocacao;

    @Column(nullable=true)
    @Temporal(TemporalType.DATE)
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @Future 
    private Date terminoLocacao;

    public void setInicioLocacao(Date inicioLocacao) {      
        this.inicioLocacao = inicioLocacao;
    }

    public void setTerminoLocacao(Date terminoLocacao) {
        this.terminoLocacao = terminoLocacao;
    }
}

Шаблон Thymeleaf

<!-- Início Locação -->
<div class="form-group">
    <label for="frmInicioLocacao" class="form-control-label text-primary"><strong>Início Locação</strong></label>
    <input type="date" class="form-control" id="frmInicioLocacao" name="inicioLocacao"  
           th:value="${anuncioImovel.inicioLocacao} ? ${#dates.format(anuncioImovel.inicioLocacao, 'yyyy-MM-dd')}"
           th:classappend="${#fields.hasErrors('anuncioImovel.inicioLocacao')} ? 'is-invalid' : ''"
           oninput="javascript: this.value = this.value.slice(0, 10);"/>

    <div class="invalid-feedback">
        <span th:errors="*{anuncioImovel.inicioLocacao}"></span>
    </div>
</div>

<!-- Término Locação -->
<div class="form-group">
    <label for="frmTerminoLocacao" class="form-control-label text-primary"><strong>Término Locação</strong></label>
    <input type="date" class="form-control" id="frmTerminoLocacao" name="terminoLocacao" 
           th:value="${anuncioImovel.terminoLocacao} ? ${#dates.format(anuncioImovel.terminoLocacao, 'yyyy-MM-dd')}"
           th:classappend="${#fields.hasErrors('anuncioImovel.terminoLocacao')} ? 'is-invalid' : ''"
           oninput="javascript: this.value = this.value.slice(0, 10);"/>

    <div class="invalid-feedback">
        <span th:errors="*{anuncioImovel.terminoLocacao}"></span>
    </div>
</div>

Ошибка печати, отправленная пользователем нажмите здесь

Мой тест В моем тесте на Iphone показаны датытаким образом, и преобразование работает (я не знаю, как дата отображается на устройстве пользователя): Нажмите здесь

1 Ответ

0 голосов
/ 09 октября 2018

В вашей ошибке указано, что она не может разобрать формат даты dd/MM/yyyy.

В вашем коде вы используете формат yyyy-MM-dd.

Вы уверены, что отправляете правильный формат даты?

...