我一直在努力工作几个小时。我有一个名为Location的复杂类,里面有许多非原始成员。只有三个不可为空的成员,所以在JUnit测试中我在POST中发送这个Json来创建类:
{
"verified": true,
"company": "http://localhost:8080/enums_servicingcompany/PBTI",
"txCode": "http://localhost:8080/enums_tax/9"
}
发送此代码并获得响应的代码是:
HttpHeaders headers = new HttpHeaders();
HttpEntity<?> entity = new HttpEntity<>( locSend, headers );
HttpEntity<String> response = restTemplate.exchange(TestBase.URL + URL, HttpMethod.POST, entity, String.class);
String result= response.getBody();
HttpHeaders rheaders = response.getHeaders();
响应带有'Okay HTTP200',但结果包含:
{"error":"Can not deserialize value of type java.sql.Timestamp from String \"2017-02-06 15:07:17.566\": not a valid representation
(error: Failed to parse Date value '2017-02-06 15:07:17.566': Can not parse date \"2017-02-06 15:07:17.566Z\":
while it seems to fit format 'yyyy-MM-dd'T'HH:mm:Ss.SSS'Z'', parsing fails (leniency? null))\n at [Source: org.apache.catalina.connector.CoyoteInputStream@290d9d75; line: 1, column: 109]
(through reference chain: mysite.location.Location[\"availableServicesAsOf\"])"}
它抱怨的日期/时间字符串似乎来自SQL Server数据库,其中特定列在此修改:
ALTER TABLE [dbo].[Location] ADD CONSTRAINT [DF_Location_AvailableServicesAsOf] DEFAULT (getdate()) FOR [AvailableServicesAsOf]
服务器端,Location的Java代码包括:
@Column(name="AvailableServicesAsOf", nullable=true)
private java.sql.Timestamp availableServicesAsOf = new java.sql.Timestamp(java.util.Calendar.getInstance().getTime().getTime());
服务器端被设计为JPARepository,因此所有POST处理都在封面下完成。从POST或GET返回开始:
{
"creationDate" : null,
"lastModified" : null,
"specialhandlingComment" : null,
"availableServicesAsOf" : "2017-02-06T14:39:52.045+0000",
"verified" : true,
我已经开始使用restTemplate.postForObject(),它适用于其他类,但它只是“无法转换为所需的对象”,因为我们期望Json并收到错误消息 - 这对于丝毫。
那么我可以做些什么来解决这个问题呢?无法POST数据,我无法创建进行JUnit测试的实例。 (当请求从前端进入时,一切正常。)
令人惊讶的是,我可以执行以下JUnit代码:
RestTemplate restTemplate = new RestTemplate();
FMT_Location_RCV location = restTemplate.getForObject(TestBase.URL + URL + id, FMT_Location_RCV.class);
我从位置接收数据没有错误。 avaialableServicesAsOf包含字符串“2017-02-06T21:48:52.285 + 0000”。那么为什么它在GET上成功格式化,但如果我尝试使用相同格式的Java类的postForObject(),它会失败?