$http.POST 不适用于 DATETIME 数据类型(AngularJS、Spring 4.2、MySQL、Hibernate)

Posted

技术标签:

【中文标题】$http.POST 不适用于 DATETIME 数据类型(AngularJS、Spring 4.2、MySQL、Hibernate)【英文标题】:$http.POST not working with DATETIME datatype (AngularJS, Spring 4.2, MySQL, Hibernate) 【发布时间】:2015-10-15 19:46:10 【问题描述】:

尝试在我的表中插入一条新记录,当我想插入带有日期字段的行时,我总是收到错误 400(错误请求,语法错误)。我测试了从表单中删除“日期”字段的 POST,它可以工作。一旦添加此输入,它就会停止工作。这是一个简单的文本输入,我使用现有行中的日期(复制/粘贴)来测试它,因为它适用于 $http.PUT。

我有 'Content-Type': 'application/x-www-form-urlencoded'

当我更新现有行 ($http.PUT) 时,它可以完美运行,但是当我尝试创建新行时,它不会。我对这一切都很陌生,我搜索了很多论坛,但找不到任何我想做的例子。

我不知道该提供什么来帮助你理解,但问我,我会分享。

非常感谢!非常感谢您的帮助!

编辑:我正在添加 Angular 代码来帮助

$scope.createDepense = function (newDepenseForm) 

    if (!newDepenseForm.$valid) 
        $scope.displayValidationError = true;
        return;
    

    $scope.lastAction = 'create';

    var url = $scope.url;

    var config = headers: 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8';

    $scope.addSearchParametersIfNeeded(config, false);

    $scope.startDialogAjaxRequest();
    debugger;

    $http.post(url, $.param($scope.depense), config)
        .success(function (data) 
            $scope.finishAjaxCallOnSuccess(data, "#addDepensesModal", false);
        )
        .error(function(data, status, headers, config) 
            console.log(headers);
            console.log(config);
            console.log(status);
            console.log(data);
            debugger;
            $scope.handleErrorInDialogs(status);
        );
;

还有我的模特:

        import java.sql.Timestamp;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;


    @Entity
    public class Depenses 

        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column(name="id_fact")
        private int idFact;

        @Column(name="date_eff")
        private Timestamp dateEff;

etc...

这是我更新记录的时候(PUT,工作) working $http.PUT with date changed

并且 $http.POST 不工作 not working $http.POST

也试过了,但没有成功

    @Column(name="date_eff")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dateEff;

【问题讨论】:

您是否将数据作为字符串发送?作为日期?在后端服务器期望什么样的类型?如果您的 POST 在不同的上下文中工作,则可能是数据格式问题。 是的,它似乎与数据格式有关。数据库字段是“日期时间”。正如我在调试 Angular 时看到的那样,在 $scope 中,POST 时的数据是字符串(在双引号之间)。 非常感谢,您的问题在“格式”路径上发送给我!它帮助很大 【参考方案1】:

我终于找到了!

改变模型:

@Column(name="date_eff", columnDefinition="DATETIME")
@Temporal(TemporalType.TIMESTAMP)
private Date dateEff;

这在 .jsp 中输入 type="text" 为:

<input type="date"
    autofocus
    ng-model="depense.dateEff"
    name="dateEff"
/>

还有,瞧!修复了!

【讨论】:

以上是关于$http.POST 不适用于 DATETIME 数据类型(AngularJS、Spring 4.2、MySQL、Hibernate)的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 http.post 不适用于 web api

Python Flask 跨站点 HTTP POST - 不适用于特定允许的来源

TypeError:“datetime.datetime”对象的描述符“date”不适用于“datetime.date”对象

iter() 不适用于 datetime.now()

HTTP POST 请求适用于 Postman,但不适用于我的 Web 应用程序的 JavaScript 提取 [关闭]

不适用于python中的代码datetime.strptime