如何在Spring Requestmapping中将日期作为对象参数发布

时间:2017-05-24 08:10:35

标签: java spring kendo-ui http-post

在我的浏览器调试中,我可以看到我的v对象中有一个日期参数(Wed Mar 25 2015 03:00:00 GMT + 0300(土耳其标准时间)),全文字符串格式。

 function saveVehicle(v) {
        return $http.post('/shipment/vehicle/save', v).then(function(response) {
            return response.data;
        })

问题出在我的requestmapping debug中,date参数带有null。服务器端编码是这样的:

@RequestMapping(value="/vehicle/save", method = RequestMethod.POST)
public Vehicle saveVehicle(@RequestBody Vehicle v){
    return vehicleRepository.save(v);
}

我的车型是这样的:

@Entity
@Table(name = "VEHICLE", schema = "VV")
public class Vehicle {   

    @Column(name = "LOADING_DT")
    @JsonSerialize(using = TfJsonDateSerializer.class)
    @JsonDeserialize(using = TfJsonDateDeSerializer.class)
    private Date loadingDate;

3 个答案:

答案 0 :(得分:1)

您需要映射您的对象' v'从浏览器发送到Java对象' Vehicle'。

通常使用json映射器或从Map到您的Vehicle pojo的自定义映射。

答案 1 :(得分:0)

还尝试POST一个格式正确的对象,可以通过参数名称重新排列你的pojo。

v = {
    "loading_date": new Date()
}
$http.post(..., v);

此外,我发现你正在使用自定义(反)序列化程序,所以请根据JS如何序列化日期值,发布他们的代码或确保它们正确执行

最好

NAS

答案 2 :(得分:0)

请求正文中的属性可能与java loading_date属性的名称不同。

假设您的请求正文有一个名为import com.fasterxml.jackson.annotation.JsonProperty; @JsonProperty("loading_date") private Date loadingDate; 的属性,您必须将该名称映射到java属性,如下所示:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonFormat;

@JsonProperty("loading_date")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "UTC")
private Date loadingDate;

此外,为日期定义字符串转换可能是个好主意:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonFormat;

@JsonProperty("loading_date")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "UTC")
private Date loadingDate;

public Date getLoadingDate() {
    return loadingDate;
}

public void setLoadingDate(Date loadingDate) {
    this.loadingDate = loadingDate;
}

并添加getter和setter以防您忘记:

{{1}}