Java 如何接收LocalDate作为参数

Java 如何接收LocalDate作为参数,java,spring-mvc,java-time,localdate,Java,Spring Mvc,Java Time,Localdate,我试图将一个简单对象插入数据库,但在我的控制器上无法发送LocalDate参数 错误显示格式错误的请求语法、无效的请求消息帧或欺骗性的请求路由,我很确定这是由LocalDate参数引起的 我的控制器 @RequestMapping(value = "/finance",method = RequestMethod.POST) public String postFinance(@ModelAttribute("finance") Finance finance, Mod

我试图将一个简单对象插入数据库,但在我的控制器上无法发送
LocalDate
参数

错误显示
格式错误的请求语法、无效的请求消息帧或欺骗性的请求路由
,我很确定这是由
LocalDate
参数引起的

我的控制器

@RequestMapping(value = "/finance",method = RequestMethod.POST)
    public String postFinance(@ModelAttribute("finance") 
        Finance finance, Model model){
       financeServices.targetActivate(finance);
       model.addAttribute("targetSetStatus",true);
        return "finance/finance";
}
金融实体

@Entity
public class Finance {


    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private LocalDate targetDate;
    private Double targetAmount;
    private LocalDate createdDate;

      //getter setters //

}
编辑:- 我正在尝试从表单中插入,因此我的表单如下所示:-

<form class="form-horizontal" id="productForm" 
th:action="@{/finance}" method="post">

        <div class="form-group">
            <div th:if="${targetSetStatus}">
                <div class="alert alert-success">
                            <p>New Target Has Been Set</p>
                </div>
            </div>
        </div>

        <div class="form-group">
                <label class="control-label col-sm-3" 
                for="targetAmount">Target Amount:</label>
            <div class="col-sm-9">
                <input type="number" class="form-control"
                               placeholder="Targeted Amount" 
                               name="targetAmount" id="targetAmount">
        </div>
        </div>
        <div class="form-group">
            <label class="control-label col-sm-3" 
            for="targetDate">Target Date:</label>
            <div class="col-sm-9">
            <input type="date" class="form-control"
                               placeholder="Targeted Date"
                                name="targetDate" id="targetDate">
        </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-3 col-sm-9">
                <button type="submit" class="btn btn-default">Set Target</button>
        </div>
    </div>
</form>

新的目标已经确定

目标金额: 目标日期: 设定目标

如果我用
java.util.Date
替换LocalDate,它可以工作,但我想使用Java8提供的API来替换LocalDate。

您必须注册一个自定义JsonDeserializer。使用此代码:

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import org.springframework.boot.jackson.JsonComponent;

import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

@JsonComponent
public class CustomJsonDeserializer {

    /*public static class Serializer extends JsonSerializer<LocalDate> {

        @Override
        public void serialize(LocalDate localDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {

        }
    }*/

    public static class LocalDateDeserializer extends JsonDeserializer<LocalDate> {

        @Override
        public LocalDate deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {

            String strDate = jsonParser.getValueAsString();

            if (strDate == null || strDate.isEmpty()) {
                return null;
            }

            return LocalDate.parse(strDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        }
    }

}
import com.fasterxml.jackson.core.JsonParser;
导入com.fasterxml.jackson.core.JsonProcessingException;
导入com.fasterxml.jackson.databind.DeserializationContext;
导入com.fasterxml.jackson.databind.JsonDeserializer;
导入org.springframework.boot.jackson.JsonComponent;
导入java.io.IOException;
导入java.time.LocalDate;
导入java.time.format.DateTimeFormatter;
@JsonComponent
公共类CustomJsonDeserializer{
/*公共静态类序列化程序扩展JsonSerializer{
@凌驾
public void serialize(LocalDate LocalDate、JsonGenerator JsonGenerator、SerializerProvider SerializerProvider)抛出IOException、JsonProcessingException{
}
}*/
公共静态类LocalDateDeserializer扩展JsonDeserializer{
@凌驾
公共LocalDate反序列化(JsonParser、JsonParser、DeserializationContext、DeserializationContext)抛出IOException、JsonProcessingException{
字符串strDate=jsonParser.getValueAsString();
if(strDate==null | | strDate.isEmpty()){
返回null;
}
返回LocalDate.parse(模式的标准日期、日期时间格式(“yyyy-MM-dd”);
}
}
}

查看此链接

未来的基础支持,请参阅。同时,我使用的是SpringMVC,而不是SpringBoot。那么这仍然有效吗?我编写了上面的导入spring启动依赖项的类,但它不起作用。此链接可以帮助您