Не удалось преобразовать значение свойства типа «java.lang.String» в требуемый тип «java.time.LocalDate» для свойства «date» в форме тимилиста - PullRequest
0 голосов
/ 07 июня 2018
<form th:action="@{/hi}"  th:object="${datum}" method="post">
    <p>date : <input type="date" th:field="*{date}"/> </p>
    <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>

Контроллер для формы выше

@PostMapping("/hi")
fun testum(@ModelAttribute datum: Datum) {
    println(datum)
}

простой класс pojo

class Datum(
        @DateTimeFormat(pattern = "yyyy-MM-dd")
        var date: LocalDate? = null
)

Я пытаюсь отправить дату в форме, но получаю это исключение:

Resolved exception caused by Handler execution: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'datum' on field 'date': rejected value [2018-06-20]; codes [typeMismatch.datum.date,typeMismatch.date,typeMismatch.java.time.LocalDate,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [datum.date,date]; arguments []; default message [date]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDate' for property 'date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.time.LocalDate] for value '2018-06-20'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2018-06-20]]

Но если я изменю тип с LocalDate на String, он будет работать нормально.Я хочу отобразить дату, которая находится в форме для даты свойство класса Datum.кто-нибудь может мне помочь с этим?какие ссылки?спасибо.

Эта ссылка мне не помогла похожая проблема

1 Ответ

0 голосов
/ 07 июня 2018

Я только что создал ваш пример, используя это как контроллер:

@Controller
public class StackOverflow {

@GetMapping("/stack")
public String template(Model m) {
    m.addAttribute("datum", new Datanum());
    return "stackoverflow.html";
}

@PostMapping("/stack2")
public String testum(@ModelAttribute Datanum user) {
    System.out.println(user.getDate());
    return null;
}
}

это как представление:

<!DOCTYPE html>
<html xmlns:th="http://www.thymleaf.org">
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<form th:action="@{/stack2}"  th:object="${datum}" method="post">
            <p>date : <input type="date" th:field="*{date}"/> </p>
            <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
        </form>
</body>
</html>

и это как Bean

   import java.time.LocalDate;

   import org.springframework.format.annotation.DateTimeFormat;

   public class Datanum{
        @DateTimeFormat(pattern = "yyyy-MM-dd")
        private LocalDate date;

        public LocalDate getDate() {
            return date;
        }

        public void setDate(LocalDate date) {
            this.date = date;
        }
    }

и этоработал:

enter image description here

enter image description here

Разница, которую я вижу в том, что вы используете var наваш Боб

  var date: LocalDate? = null

Я думаю, что это Java 10, не так ли?почему бы вам не попробовать использовать

bean-компонент, как я, возможно, это могло бы вам помочь.

вместо var используйте LocalDate

надеюсь, это сработает

...