$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”对象
HTTP POST 请求适用于 Postman,但不适用于我的 Web 应用程序的 JavaScript 提取 [关闭]